diff options
author | Richard van der Hoff <github@rvanderhoff.org.uk> | 2017-03-17 11:32:44 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-17 11:32:44 +0000 |
commit | 2abe85d50eb3e9bad133ce92d5c1ebf697583878 (patch) | |
tree | aa76bf13dcfac9bdf886a49b52006b78f8070fab /synapse/util | |
parent | Merge pull request #2022 from matrix-org/erikj/no_op_sync (diff) | |
parent | Queue up federation PDUs while a room join is in progress (diff) | |
download | synapse-2abe85d50eb3e9bad133ce92d5c1ebf697583878.tar.xz |
Merge pull request #2016 from matrix-org/rav/queue_pdus_during_join
Queue up federation PDUs while a room join is in progress
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/logcontext.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/synapse/util/logcontext.py b/synapse/util/logcontext.py index 6c83eb213d..d73670f9f2 100644 --- a/synapse/util/logcontext.py +++ b/synapse/util/logcontext.py @@ -308,6 +308,31 @@ def preserve_context_over_deferred(deferred, context=None): return d +def reset_context_after_deferred(deferred): + """If the deferred is incomplete, add a callback which will reset the + context. + + This is useful when you want to fire off a deferred, but don't want to + wait for it to complete. (The deferred will restore the current log context + when it completes, so if you don't do anything, it will leak log context.) + + (If this feels asymmetric, consider it this way: we are effectively forking + a new thread of execution. We are probably currently within a + ``with LoggingContext()`` block, which is supposed to have a single entry + and exit point. But by spawning off another deferred, we are effectively + adding a new exit point.) + + Args: + deferred (defer.Deferred): deferred + """ + def reset_context(result): + LoggingContext.set_current_context(LoggingContext.sentinel) + return result + + if not deferred.called: + deferred.addBoth(reset_context) + + def preserve_fn(f): """Ensures that function is called with correct context and that context is restored after return. Useful for wrapping functions that return a deferred |