Author: tack
Date: Sun Mar 19 20:17:38 2006
New Revision: 1311
Modified:
trunk/base/src/notifier/sockets.py
Log:
Socket keeps ref cycle with notifier only while connected, so that
disconnected sockets get deallocated without intervention from gc.
Modified: trunk/base/src/notifier/sockets.py
==============================================================================
--- trunk/base/src/notifier/sockets.py (original)
+++ trunk/base/src/notifier/sockets.py Sun Mar 19 20:17:38 2006
@@ -91,8 +91,12 @@
"connected": Signal()
}
- self._rmon = SocketDispatcher(self._handle_read)
- self._wmon = SocketDispatcher(self._handle_write)
+ # These variables hold the socket dispatchers for monitoring; we
+ # only allocate a dispatcher when the socket is connected to avoid
+ # a ref cycle so that disconnected sockets will get properly deleted
+ # when they are not referenced.
+ self._rmon = self._wmon = None
+
self._listening = False
if addr:
@@ -214,8 +218,12 @@
self._socket.setblocking(False)
- self._rmon.unregister()
- self._wmon.unregister()
+ if self._rmon:
+ self._rmon.unregister()
+ self._wmon.unregister()
+
+ self._rmon = SocketDispatcher(self._handle_read)
+ self._wmon = SocketDispatcher(self._handle_write)
self._rmon.register(self._socket, IO_READ)
if self._write_buffer:
@@ -249,6 +257,7 @@
def close(self, expected = True):
self._rmon.unregister()
self._wmon.unregister()
+ self._rmon = self._wmon = None
self._write_buffer = ""
self._socket.close()
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog