From 830d07db8278d773338fee94eb269eafd6b1b7fc Mon Sep 17 00:00:00 2001
From: Erik Johnston <erik@matrix.org>
Date: Wed, 8 Apr 2015 13:40:20 +0100
Subject: [PATCH] Also perform paranoia checks in 'on_new_user_event'

---
 synapse/notifier.py | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/synapse/notifier.py b/synapse/notifier.py
index ce9b0d2187..be78082021 100644
--- a/synapse/notifier.py
+++ b/synapse/notifier.py
@@ -252,10 +252,24 @@ class Notifier(object):
         listeners = set()
 
         for user in users:
-            listeners |= self.user_to_listeners.get(user, set()).copy()
+            user_listeners = self.user_to_listeners.get(user, set())
+
+            # Remove any 'stale' listeners.
+            for l in user_listeners.copy():
+                if l.notified():
+                    user_listeners.discard(l)
+
+            listeners |= user_listeners
 
         for room in rooms:
-            listeners |= self.room_to_listeners.get(room, set()).copy()
+            room_listeners = self.room_to_listeners.get(room, set())
+
+            # Remove any 'stale' listeners.
+            for l in room_listeners.copy():
+                if l.notified():
+                    room_listeners.discard(l)
+
+            listeners |= room_listeners
 
         @defer.inlineCallbacks
         def notify(listener):
-- 
GitLab