QPID-7429 [Python Client 0-8..0-91] Prevent Client from leaking threads when connection is closed remotely
diff --git a/qpid/peer.py b/qpid/peer.py
index 3025c2e..2ff25c0 100644
--- a/qpid/peer.py
+++ b/qpid/peer.py
@@ -105,7 +105,7 @@
try:
frame = self.conn.read()
except EOF, e:
- self.work.close()
+ self.work.close("Connection lost")
break
ch = self.channel(frame.channel)
ch.receive(frame, self.work)
@@ -121,6 +121,7 @@
self.delegate.closed(reason)
for ch in self.channels.values():
ch.closed(reason)
+ self.outgoing.close()
def writer(self):
try:
@@ -149,8 +150,8 @@
content = None
self.delegate(channel, Message(channel, frame, content))
- except QueueClosed:
- self.closed("worker closed")
+ except QueueClosed, e:
+ self.closed(str(e) or "worker closed")
except:
self.fatal()
diff --git a/qpid/queue.py b/qpid/queue.py
index 63a7684..100bb0b 100644
--- a/qpid/queue.py
+++ b/qpid/queue.py
@@ -40,7 +40,8 @@
self.thread = None
def close(self, error = None):
- self.error = error
+ if error and self.error is None:
+ self.error = error
self.put(Queue.END)
if self.thread is not None:
self.thread.join()