From: Ed Page Date: Sat, 27 Feb 2010 05:23:22 +0000 (-0600) Subject: Adding an auto-cleanup in case the client is being a real pain and not cleaning up... X-Git-Url: http://git.maemo.org/git/?p=theonering;a=commitdiff_plain;h=fb2fa0d9b7d88554c8b9c23c5f81b6c365fc4f53 Adding an auto-cleanup in case the client is being a real pain and not cleaning up resouces --- diff --git a/src/autogv.py b/src/autogv.py index 57c9a37..b29990e 100644 --- a/src/autogv.py +++ b/src/autogv.py @@ -140,6 +140,23 @@ class RefreshVoicemail(object): self._outstandingRequests.remove(missDetection) +class TimedDisconnect(object): + + def __init__(self, connRef): + self._connRef = connRef + self.__delayedDisconnect = gobject_utils.Timeout(self._on_delayed_disconnect) + + def start(self): + self.__delayedDisconnect.start(seconds=5) + + def stop(self): + self.__delayedDisconnect.cancel() + + def _on_delayed_disconnect(self): + _moduleLogger.info("Timed disconnect occurred") + self._connRef().disconnect(telepathy.CONNECTION_STATUS_REASON_NETWORK_ERROR) + + class AutoDisconnect(object): def __init__(self, connRef): diff --git a/src/connection.py b/src/connection.py index fc62020..a5dec2e 100644 --- a/src/connection.py +++ b/src/connection.py @@ -142,6 +142,8 @@ class TheOneRingConnection( self._delayedConnect = gobject_utils.Async(self._delayed_connect) _moduleLogger.info("Connection to the account %s created" % account) + self._timedDisconnect = autogv.TimedDisconnect(weakref.ref(self)) + self._timedDisconnect.start() @property def manager(self): @@ -188,6 +190,7 @@ class TheOneRingConnection( return _moduleLogger.info("Kicking off connect") self._delayedConnect.start() + self._timedDisconnect.stop() @misc_utils.log_exception(_moduleLogger) def _delayed_connect(self): @@ -279,6 +282,7 @@ class TheOneRingConnection( _moduleLogger.info("Disconnecting") self._delayedConnect.cancel() + self._timedDisconnect.stop() # Not having the disconnect first can cause weird behavior with clients # including not being able to reconnect or even crashing