summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-09-06 17:38:11 +0100
committerErik Johnston <erik@matrix.org>2014-09-06 17:38:11 +0100
commitde55ba218f6f7a67684e09f34153476e2274e341 (patch)
tree5efb598a5a09a9b5d37c3f75960addca22251d6e
parentBump version and changelog (diff)
downloadsynapse-de55ba218f6f7a67684e09f34153476e2274e341.tar.xz
Fix race in presence handler where we evicted things from cache while handling a key therein
-rw-r--r--synapse/handlers/presence.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index c79bb6ff76..b2af09f090 100644
--- a/synapse/handlers/presence.py
+++ b/synapse/handlers/presence.py
@@ -796,11 +796,12 @@ class PresenceEventSource(object):
         updates = []
         # TODO(paul): use a DeferredList ? How to limit concurrency.
         for observed_user in cachemap.keys():
-            if not (from_key < cachemap[observed_user].serial):
+            cached = cachemap[observed_user]
+            if not (from_key < cached.serial):
                 continue
 
             if (yield self.is_visible(observer_user, observed_user)):
-                updates.append((observed_user, cachemap[observed_user]))
+                updates.append((observed_user, cached))
 
         # TODO(paul): limit