diff options
author | Erik Johnston <erik@matrix.org> | 2017-11-15 11:32:24 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2017-11-15 11:32:24 +0000 |
commit | 552f123bea1014680ab798b7e34cd1b23424a189 (patch) | |
tree | 71da1c70b084a38a032380f8976a0c4deef33d64 /synapse/util/async.py | |
parent | Merge pull request #2598 from matrix-org/revert-2596-erikj/attestation_jitter (diff) | |
parent | Bump changelog (diff) | |
download | synapse-552f123bea1014680ab798b7e34cd1b23424a189.tar.xz |
Merge branch 'release-v0.25.0' of github.com:matrix-org/synapse v0.25.0
Diffstat (limited to '')
-rw-r--r-- | synapse/util/async.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/synapse/util/async.py b/synapse/util/async.py index 1a884e96ee..e786fb38a9 100644 --- a/synapse/util/async.py +++ b/synapse/util/async.py @@ -278,8 +278,13 @@ class Limiter(object): if entry[0] >= self.max_count: new_defer = defer.Deferred() entry[1].append(new_defer) + + logger.info("Waiting to acquire limiter lock for key %r", key) with PreserveLoggingContext(): yield new_defer + logger.info("Acquired limiter lock for key %r", key) + else: + logger.info("Acquired uncontended limiter lock for key %r", key) entry[0] += 1 @@ -288,16 +293,21 @@ class Limiter(object): try: yield finally: + logger.info("Releasing limiter lock for key %r", key) + # We've finished executing so check if there are any things # blocked waiting to execute and start one of them entry[0] -= 1 - try: - entry[1].pop(0).callback(None) - except IndexError: - # If nothing else is executing for this key then remove it - # from the map - if entry[0] == 0: - self.key_to_defer.pop(key, None) + + if entry[1]: + next_def = entry[1].pop(0) + + with PreserveLoggingContext(): + next_def.callback(None) + elif entry[0] == 0: + # We were the last thing for this key: remove it from the + # map. + del self.key_to_defer[key] defer.returnValue(_ctx_manager()) |