summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Churchill <damoxc@gmail.com>2010-10-10 19:51:50 +0100
committerDamien Churchill <damoxc@gmail.com>2010-10-10 19:51:50 +0100
commit59e01e7ecfca089b759b22f00eb2abc1693b4fcc (patch)
treeb100d14fed9c142a03a6238f40451204cede4f17
parent4c52ee42291c0293186e6bfa3f5881c9bb7cdc38 (diff)
downloaddeluge-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.py11
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):
"""