diff options
author | Erik Johnston <erik@matrix.org> | 2021-07-09 11:26:17 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2021-07-09 11:26:17 +0100 |
commit | 251cfc4e09c36c87227771f1a3aa305c4b0a2121 (patch) | |
tree | aadcd7bfc13088274b812f3d48a935eb0b7d5c70 /synapse | |
parent | Upsert redactions in case they already exists (#10343) (diff) | |
parent | Fixup changelog (diff) | |
download | synapse-251cfc4e09c36c87227771f1a3aa305c4b0a2121.tar.xz |
Merge tag 'v1.38.0rc2' into develop
Synapse 1.38.0rc2 (2021-07-09) ============================== Bugfixes -------- - Fix bug where inbound federation in a room could be delayed due to not correctly dropping a lock. Introduced in v1.37.1. ([\#10336](https://github.com/matrix-org/synapse/issues/10336)) Improved Documentation ---------------------- - Update links to documentation in the sample config. Contributed by @dklimpel. ([\#10287](https://github.com/matrix-org/synapse/issues/10287)) - Fix broken links in [INSTALL.md](INSTALL.md). Contributed by @dklimpel. ([\#10331](https://github.com/matrix-org/synapse/issues/10331))
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/__init__.py | 2 | ||||
-rw-r--r-- | synapse/federation/federation_server.py | 1 | ||||
-rw-r--r-- | synapse/storage/databases/main/lock.py | 15 |
3 files changed, 15 insertions, 3 deletions
diff --git a/synapse/__init__.py b/synapse/__init__.py index aa9a3269c0..119afa9ebe 100644 --- a/synapse/__init__.py +++ b/synapse/__init__.py @@ -47,7 +47,7 @@ try: except ImportError: pass -__version__ = "1.38.0rc1" +__version__ = "1.38.0rc2" if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)): # We import here so that we don't have to install a bunch of deps when diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index bf67d0f574..ac0f2ccfb3 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -949,6 +949,7 @@ class FederationServer(FederationBase): room_id, room_version ) if not next: + await lock.release() return origin, event = next 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 |