This is an automated email from the ASF dual-hosted git repository.

cliffjansen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git

commit 69339dedbb2ec8d6f934e7de08d021e525312c03
Author: Cliff Jansen <cliffjan...@apache.org>
AuthorDate: Fri Apr 2 11:46:39 2021 -0700

    PROTON-2344: fix Python BlockingConnection resource leaks, memory and 
socket fds
---
 python/proton/_utils.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/python/proton/_utils.py b/python/proton/_utils.py
index 52bdfc2..275f12b 100644
--- a/python/proton/_utils.py
+++ b/python/proton/_utils.py
@@ -440,12 +440,16 @@ class BlockingConnection(Handler):
                 self.conn.close()
                 self.wait(lambda: not (self.conn.state & 
Endpoint.REMOTE_ACTIVE),
                           msg="Closing connection")
+                if self.conn.transport:
+                    # Close tail to force transport cleanup without 
waiting/hanging for peer close frame.
+                    self.conn.transport.close_tail()
         finally:
             self.conn.free()
             # Nothing left to block on.  Allow reactor to clean up.
             self.run()
-            self.conn = None
-            self.container.global_handler = None  # break circular ref: 
container to cadapter.on_error
+            if self.conn:
+                self.conn.handler = None  # break cyclical reference
+                self.conn = None
             self.container.stop_events()
             self.container = None
 
@@ -502,9 +506,6 @@ class BlockingConnection(Handler):
                         raise Timeout(txt)
             finally:
                 self.container.timeout = container_timeout
-        if self.disconnected or self._is_closed():
-            self.container.stop()
-            self.conn.handler = None  # break cyclical reference
         if self.disconnected and not self._is_closed():
             raise ConnectionException(
                 "Connection %s disconnected: %s" % (self.url, 
self.disconnected))
@@ -534,7 +535,8 @@ class BlockingConnection(Handler):
         self.on_transport_closed(event)
 
     def on_transport_closed(self, event):
-        self.disconnected = event.transport.condition or "unknown"
+        if not self.closing:
+            self.disconnected = event.transport.condition or "unknown"
 
 
 class AtomicCount(object):

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to