diff options
author | Erik Johnston <erik@matrix.org> | 2021-07-09 10:16:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-09 10:16:54 +0100 |
commit | 1579fdd54a9aab6b65ddb8de4e83b61c3384e2fe (patch) | |
tree | 9e6f9067a49845cb0ae0c4b4305fece35cb86fe1 /synapse/storage/databases/main/lock.py | |
parent | Fix broken links in INSTALL.md (#10331) (diff) | |
download | synapse-1579fdd54a9aab6b65ddb8de4e83b61c3384e2fe.tar.xz |
Ensure we always drop the federation inbound lock (#10336)
Diffstat (limited to 'synapse/storage/databases/main/lock.py')
-rw-r--r-- | synapse/storage/databases/main/lock.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/synapse/storage/databases/main/lock.py b/synapse/storage/databases/main/lock.py index e76188328c..774861074c 100644 --- a/synapse/storage/databases/main/lock.py +++ b/synapse/storage/databases/main/lock.py @@ -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 |