// +build ignore,OMIT package sample // OMIT type Stream struct { // some fields isConnClosed bool connClosedCond *sync.Cond connClosedLocker sync.Mutex } func (s *Stream) Wait() error { s.connClosedCond.L.Lock() for !s.isConnClosed { s.connClosedCond.Wait() } s.connClosedCond.L.Unlock() // some code } func (s *Stream) Close() { // some code s.connClosedCond.L.Lock() s.isConnClosed = true s.connClosedCond.L.Unlock() s.connClosedCond.Broadcast() } func (s *Stream) IsClosed() bool { return s.isConnClosed }