diff options
author | Mark Haines <mjark@negativecurvature.net> | 2015-12-14 15:21:52 +0000 |
---|---|---|
committer | Mark Haines <mjark@negativecurvature.net> | 2015-12-14 15:21:52 +0000 |
commit | e98e00558a13fb78010620299f7ce1cfbf4d661d (patch) | |
tree | b8f5afc4e48124ca7684fcf1331fbdcb3fb01c66 /synapse | |
parent | Merge pull request #441 from matrix-org/markjh/fts_skip_invalid (diff) | |
parent | Fix a race between started/stopped stream (diff) | |
download | synapse-e98e00558a13fb78010620299f7ce1cfbf4d661d.tar.xz |
Merge pull request #444 from matrix-org/markjh/presence_race
Fix a race between started/stopped stream
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/events.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/synapse/handlers/events.py b/synapse/handlers/events.py index fe300433e6..576d77e0e7 100644 --- a/synapse/handlers/events.py +++ b/synapse/handlers/events.py @@ -69,7 +69,12 @@ class EventStreamHandler(BaseHandler): A deferred that completes once their presence has been updated. """ if user not in self._streams_per_user: - self._streams_per_user[user] = 0 + # Make sure we set the streams per user to 1 here rather than + # setting it to zero and incrementing the value below. + # Otherwise this may race with stopped_stream causing the + # user to be erased from the map before we have a chance + # to increment it. + self._streams_per_user[user] = 1 if user in self._stop_timer_per_user: try: self.clock.cancel_call_later( @@ -79,8 +84,8 @@ class EventStreamHandler(BaseHandler): logger.exception("Failed to cancel event timer") else: yield started_user_eventstream(self.distributor, user) - - self._streams_per_user[user] += 1 + else: + self._streams_per_user[user] += 1 def stopped_stream(self, user): """If there are no streams for a user this starts a timer that will |