diff options
author | Damien Churchill <damoxc@gmail.com> | 2010-10-10 19:51:50 +0100 |
---|---|---|
committer | Damien Churchill <damoxc@gmail.com> | 2010-10-10 19:51:50 +0100 |
commit | 59e01e7ecfca089b759b22f00eb2abc1693b4fcc (patch) | |
tree | b100d14fed9c142a03a6238f40451204cede4f17 | |
parent | 4c52ee42291c0293186e6bfa3f5881c9bb7cdc38 (diff) | |
download | deluge-59e01e7ecfca089b759b22f00eb2abc1693b4fcc.tar.gz deluge-59e01e7ecfca089b759b22f00eb2abc1693b4fcc.tar.bz2 deluge-59e01e7ecfca089b759b22f00eb2abc1693b4fcc.zip |
add a check to ensure that the events loop doesn't continue indefinitely
-rw-r--r-- | deluge/ui/web/json_api.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/deluge/ui/web/json_api.py b/deluge/ui/web/json_api.py index 84e92563d..7be0316b3 100644 --- a/deluge/ui/web/json_api.py +++ b/deluge/ui/web/json_api.py @@ -382,16 +382,21 @@ class EventQueue(object): # Create a deferred to and check again in 100ms d = Deferred() - reactor.callLater(0.5, self._get_events, listener_id, d) + reactor.callLater(0.1, self._get_events, listener_id, 0, d) return d - def _get_events(self, listener_id, d): + def _get_events(self, listener_id, count, d): if listener_id in self.__queue: queue = self.__queue[listener_id] del self.__queue[listener_id] d.callback(queue) else: - reactor.callLater(0.1, self._get_events, listener_id, d) + # Prevent this loop going on indefinitely incase a client leaves + # the page or disconnects uncleanly. + if count >= 3000: + d.callback(None) + else: + reactor.callLater(0.1, self._get_events, listener_id, count + 1, d) def remove_listener(self, listener_id, event): """ |