Ensure we always drop the federation inbound lock (#10336)
This commit is contained in:
parent
974261cd81
commit
1579fdd54a
|
@ -0,0 +1 @@
|
|||
Fix bug where inbound federation in a room could be delayed due to not correctly dropping a lock. Introduced in v1.37.1.
|
|
@ -949,6 +949,7 @@ class FederationServer(FederationBase):
|
|||
room_id, room_version
|
||||
)
|
||||
if not next:
|
||||
await lock.release()
|
||||
return
|
||||
|
||||
origin, event = next
|
||||
|
|
|
@ -310,14 +310,25 @@ class Lock:
|
|||
_excinst: Optional[BaseException],
|
||||
_exctb: Optional[TracebackType],
|
||||
) -> bool:
|
||||
await self.release()
|
||||
|
||||
return False
|
||||
|
||||
async def release(self) -> None:
|
||||
"""Release the lock.
|
||||
|
||||
This is automatically called when using the lock as a context manager.
|
||||
"""
|
||||
|
||||
if self._dropped:
|
||||
return
|
||||
|
||||
if self._looping_call.running:
|
||||
self._looping_call.stop()
|
||||
|
||||
await self._store._drop_lock(self._lock_name, self._lock_key, self._token)
|
||||
self._dropped = True
|
||||
|
||||
return False
|
||||
|
||||
def __del__(self) -> None:
|
||||
if not self._dropped:
|
||||
# We should not be dropped without the lock being released (unless
|
||||
|
|
Loading…
Reference in New Issue