1 files changed, 10 insertions, 4 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index 571eacd343..42cd528908 100644
--- a/synapse/handlers/presence.py
+++ b/synapse/handlers/presence.py
@@ -858,22 +858,24 @@ class PresenceEventSource(object):
presence = self.hs.get_handlers().presence_handler
cachemap = presence._user_cachemap
+
+ max_serial = presence._user_cachemap_latest_serial
+
clock = self.clock
- latest_serial = None
+ latest_serial = 0
updates = []
# TODO(paul): use a DeferredList ? How to limit concurrency.
for observed_user in cachemap.keys():
cached = cachemap[observed_user]
- if cached.serial <= from_key:
+ if cached.serial <= from_key or cached.serial > max_serial:
continue
if not (yield self.is_visible(observer_user, observed_user)):
continue
- if latest_serial is None or cached.serial > latest_serial:
- latest_serial = cached.serial
+ latest_serial = max(cached.serial, latest_serial)
updates.append(cached.make_event(user=observed_user, clock=clock))
# TODO(paul): limit
@@ -882,6 +884,10 @@ class PresenceEventSource(object):
if serial < from_key:
break
+ if serial > max_serial:
+ continue
+
+ latest_serial = max(latest_serial, serial)
for u in user_ids:
updates.append({
"type": "m.presence",
|