Skip to content

Commit 72fb0f6

Browse files
committed
Check cache before invalidating group sessions on member event
1 parent 41b288a commit 72fb0f6

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

mautrix/client/state_store/abstract.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ async def update_state(self, evt: StateEvent) -> None:
143143
if evt.type == EventType.ROOM_POWER_LEVELS:
144144
await self.set_power_levels(evt.room_id, evt.content)
145145
elif evt.type == EventType.ROOM_MEMBER:
146+
evt.unsigned["mautrix_prev_membership"] = await self.get_member(
147+
evt.room_id, UserID(evt.state_key)
148+
)
146149
await self.set_member(evt.room_id, UserID(evt.state_key), evt.content)
147150
elif evt.type == EventType.ROOM_ENCRYPTION:
148151
await self.set_encryption_info(evt.room_id, evt.content)

mautrix/crypto/machine.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
DeviceOTKCount,
1919
EncryptionAlgorithm,
2020
EventType,
21+
Member,
2122
Membership,
2223
StateEvent,
2324
ToDeviceEvent,
@@ -172,10 +173,18 @@ async def handle_member_event(self, evt: StateEvent) -> None:
172173
if prev == cur or ignored_changes.get(prev) == cur:
173174
return
174175
src = getattr(evt, "source", None)
176+
prev_cache = evt.unsigned.get("mautrix_prev_membership")
177+
if isinstance(prev_cache, Member) and prev_cache.membership == cur:
178+
self.log.debug(
179+
f"Got duplicate membership state event in {evt.room_id} changing {evt.state_key} "
180+
f"from {prev} to {cur}, cached state was {prev_cache} (event ID: {evt.event_id}, "
181+
f"sync source: {src})"
182+
)
183+
return
175184
self.log.debug(
176185
f"Got membership state event in {evt.room_id} changing {evt.state_key} from "
177-
f"{prev} to {cur} (event ID: {evt.event_id}, sync source: {src}), "
178-
"invalidating group session"
186+
f"{prev} to {cur} (event ID: {evt.event_id}, sync source: {src}, "
187+
f"cached: {prev_cache.membership}), invalidating group session"
179188
)
180189
await self.crypto_store.remove_outbound_group_session(evt.room_id)
181190

0 commit comments

Comments
 (0)