Author: gsim
Date: Thu Jan 18 03:29:31 2007
New Revision: 497404

URL: http://svn.apache.org/viewvc?view=rev&rev=497404
Log:
Locked Channel::close() due to race.


Modified:
    incubator/qpid/trunk/qpid/python/qpid/peer.py

Modified: incubator/qpid/trunk/qpid/python/qpid/peer.py
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/python/qpid/peer.py?view=diff&rev=497404&r1=497403&r2=497404
==============================================================================
--- incubator/qpid/trunk/qpid/python/qpid/peer.py (original)
+++ incubator/qpid/trunk/qpid/python/qpid/peer.py Thu Jan 18 03:29:31 2007
@@ -127,16 +127,22 @@
     self.queue = None
     self.closed = False
     self.reason = None
+    #lock used to synchronise calls to close
+    self.lock = thread.allocate_lock()
 
   def close(self, reason):
-    if isinstance(reason, Message):
+    self.lock.acquire()
+    try:
+      if isinstance(reason, Message):
+        self.reason = reason
+      if self.closed:
+        return
+      self.closed = True
       self.reason = reason
-    if self.closed:
-      return
-    self.closed = True
-    self.reason = reason
-    self.incoming.close()
-    self.responses.close()
+      self.incoming.close()
+      self.responses.close()
+    finally:
+      self.lock.release()
 
   def dispatch(self, frame, work):
     payload = frame.payload


Reply via email to