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()