Index: 2014/readability/close-cond-bad.go |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/2014/readability/close-cond-bad.go |
@@ -0,0 +1,26 @@ |
+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 |
+} |