summary refs log tree commit diff
path: root/synapse/storage
diff options
context:
space:
mode:
authorRichard van der Hoff <1389908+richvdh@users.noreply.github.com>2018-05-18 11:23:11 +0100
committerGitHub <noreply@github.com>2018-05-18 11:23:11 +0100
commited3125b0a17bf3c34af297004dd9ecb10d18ef22 (patch)
tree69169bb98fd5690800d70435dbf1d267b5524a9a /synapse/storage
parentMerge pull request #3233 from matrix-org/rav/remove_dead_code (diff)
parentFix error in handling receipts (diff)
downloadsynapse-ed3125b0a17bf3c34af297004dd9ecb10d18ef22.tar.xz
Merge pull request #3235 from matrix-org/rav/fix_receipts_deferred
Fix error in handling receipts
Diffstat (limited to 'synapse/storage')
-rw-r--r--synapse/storage/receipts.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/synapse/storage/receipts.py b/synapse/storage/receipts.py
index 2f95e7e82a..709c69a926 100644
--- a/synapse/storage/receipts.py
+++ b/synapse/storage/receipts.py
@@ -297,18 +297,22 @@ class ReceiptsWorkerStore(SQLBaseStore):
         if receipt_type != "m.read":
             return
 
-        # Returns an ObservableDeferred
+        # Returns either an ObservableDeferred or the raw result
         res = self.get_users_with_read_receipts_in_room.cache.get(
             room_id, None, update_metrics=False,
         )
 
-        if res:
-            if isinstance(res, defer.Deferred) and res.called:
+        # first handle the Deferred case
+        if isinstance(res, defer.Deferred):
+            if res.called:
                 res = res.result
-            if user_id in res:
-                # We'd only be adding to the set, so no point invalidating if the
-                # user is already there
-                return
+            else:
+                res = None
+
+        if res and user_id in res:
+            # We'd only be adding to the set, so no point invalidating if the
+            # user is already there
+            return
 
         self.get_users_with_read_receipts_in_room.invalidate((room_id,))