summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/3473.bugfix1
-rw-r--r--changelog.d/3474.misc0
-rw-r--r--synapse/event_auth.py7
-rw-r--r--synapse/storage/events.py3
4 files changed, 9 insertions, 2 deletions
diff --git a/changelog.d/3473.bugfix b/changelog.d/3473.bugfix
new file mode 100644
index 0000000000..7244ab59f2
--- /dev/null
+++ b/changelog.d/3473.bugfix
@@ -0,0 +1 @@
+Invalidate cache on correct thread to avoid race
diff --git a/changelog.d/3474.misc b/changelog.d/3474.misc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/changelog.d/3474.misc
diff --git a/synapse/event_auth.py b/synapse/event_auth.py
index f512d88145..cdf99fd140 100644
--- a/synapse/event_auth.py
+++ b/synapse/event_auth.py
@@ -76,6 +76,7 @@ def check(event, auth_events, do_sig_check=True, do_size_check=True):
         return
 
     if event.type == EventTypes.Create:
+        sender_domain = get_domain_from_id(event.sender)
         room_id_domain = get_domain_from_id(event.room_id)
         if room_id_domain != sender_domain:
             raise AuthError(
@@ -524,7 +525,11 @@ def _check_power_levels(event, auth_events):
                     "to your own"
                 )
 
-        if old_level > user_level or new_level > user_level:
+        # Check if the old and new levels are greater than the user level
+        # (if defined)
+        old_level_too_big = old_level is not None and old_level > user_level
+        new_level_too_big = new_level is not None and new_level > user_level
+        if old_level_too_big or new_level_too_big:
             raise AuthError(
                 403,
                 "You don't have permission to add ops level greater "
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index d816d4883c..a54abb9edd 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -801,7 +801,8 @@ class EventsStore(EventsWorkerStore):
                     ]
                 )
 
-                self._curr_state_delta_stream_cache.entity_has_changed(
+                txn.call_after(
+                    self._curr_state_delta_stream_cache.entity_has_changed,
                     room_id, max_stream_order,
                 )