class MessageMixin(object):
- waiters = []
+ waiters = set()
cache = []
cache_size = 200
if recent:
callback(recent)
return
- cls.waiters.append(callback)
+ cls.waiters.add(callback)
+
+ def cancel_wait(self, callback):
+ cls = MessageMixin
+ cls.waiters.remove(callback)
def new_messages(self, messages):
cls = MessageMixin
callback(messages)
except:
logging.error("Error in waiter callback", exc_info=True)
- cls.waiters = []
+ cls.waiters = set()
cls.cache.extend(messages)
if len(cls.cache) > self.cache_size:
cls.cache = cls.cache[-self.cache_size:]
@tornado.web.asynchronous
def post(self):
cursor = self.get_argument("cursor", None)
- self.wait_for_messages(self.async_callback(self.on_new_messages),
+ self.wait_for_messages(self.on_new_messages,
cursor=cursor)
def on_new_messages(self, messages):
return
self.finish(dict(messages=messages))
+ def on_connection_close(self):
+ self.cancel_wait(self.on_new_messages)
+
class AuthLoginHandler(BaseHandler, tornado.auth.GoogleMixin):
@tornado.web.asynchronous