PROTON-2116: Python memory leak - break circular reference Transport <-> Selectable on Connection cleanup
diff --git a/python/proton/_handlers.py b/python/proton/_handlers.py
index 5ecb3e5..86d083a 100644
--- a/python/proton/_handlers.py
+++ b/python/proton/_handlers.py
@@ -1280,6 +1280,8 @@
         t.close_head()
         t.close_tail()
         s.terminate()
+        s._transport = None
+        t._selectable = None
         s.update()
 
     def on_selectable_expired(self, event):
@@ -1351,12 +1353,16 @@
         except:
             if transport.closed:
                 selectable.terminate()
+                selectable._transport = None
+                transport._selectable = None
         try:
             pending = transport.pending()
             selectable.writing = pending>0
         except:
             if transport.closed:
                 selectable.terminate()
+                selectable._transport = None
+                transport._selectable = None
         selectable.deadline = transport.tick(now)
         selectable.update()
 
@@ -1373,6 +1379,8 @@
         s = t._selectable
         if s and not s.is_terminal:
             s.terminate()
+            s._transport = None
+            t._selectable = None
             r.update(s)
         t.unbind()
 
@@ -1400,6 +1408,7 @@
             # Disassociate from the socket (which has been passed on)
             self._delegate = None
             self.terminate()
+            self._transport = None
             self.update()
             return
         elif e == errno.ECONNREFUSED:
@@ -1420,4 +1429,5 @@
         t.close_tail()
         t.close_head()
         self.terminate()
+        self._transport = None
         self.update()