diff options
author | Paul "LeoNerd" Evans <paul@matrix.org> | 2015-04-23 19:01:37 +0100 |
---|---|---|
committer | Paul "LeoNerd" Evans <paul@matrix.org> | 2015-04-23 19:01:37 +0100 |
commit | e1e5e53127540fbaa4e23fbc628113983efd767b (patch) | |
tree | 47fe3729e246c192679ec1c6b5335472e22fab35 /synapse/handlers/presence.py | |
parent | Don't let the remote offline serial list grow arbitrarily large (diff) | |
download | synapse-e1e5e53127540fbaa4e23fbc628113983efd767b.tar.xz |
Remove users from the remote_offline_serials list (and clean up empty elements) when they go online again
Diffstat (limited to 'synapse/handlers/presence.py')
-rw-r--r-- | synapse/handlers/presence.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index f929bcf853..571eacd343 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -720,14 +720,24 @@ class PresenceHandler(BaseHandler): statuscache=statuscache, ) + user_id = user.to_string() + if state["presence"] == PresenceState.OFFLINE: self._remote_offline_serials.insert( 0, - (self._user_cachemap_latest_serial, set([user.to_string()])) + (self._user_cachemap_latest_serial, set([user_id])) ) while len(self._remote_offline_serials) > MAX_OFFLINE_SERIALS: self._remote_offline_serials.pop() # remove the oldest del self._user_cachemap[user] + else: + # Remove the user from remote_offline_serials now that they're + # no longer offline + for idx, elem in enumerate(self._remote_offline_serials): + (_, user_ids) = elem + user_ids.discard(user_id) + if not user_ids: + self._remote_offline_serials.pop(idx) for poll in content.get("poll", []): user = UserID.from_string(poll) |