diff options
author | Erik Johnston <erik@matrix.org> | 2018-03-01 16:59:39 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2018-03-01 16:59:39 +0000 |
commit | 2ad4d5b5bba251e4f8afd5665c0d5865d8b18798 (patch) | |
tree | 53a3a64b3299e356e66f2b379392c4c974856435 /synapse/util/logcontext.py | |
parent | Stub out broken function only used for cache (diff) | |
parent | Merge pull request #2924 from matrix-org/erikj/split_stream_store (diff) | |
download | synapse-2ad4d5b5bba251e4f8afd5665c0d5865d8b18798.tar.xz |
Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_sig_fed
Diffstat (limited to 'synapse/util/logcontext.py')
-rw-r--r-- | synapse/util/logcontext.py | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/synapse/util/logcontext.py b/synapse/util/logcontext.py index 94fa7cac98..a8dea15c1b 100644 --- a/synapse/util/logcontext.py +++ b/synapse/util/logcontext.py @@ -299,10 +299,6 @@ def preserve_fn(f): Useful for wrapping functions that return a deferred which you don't yield on. """ - def reset_context(result): - LoggingContext.set_current_context(LoggingContext.sentinel) - return result - def g(*args, **kwargs): current = LoggingContext.current_context() res = f(*args, **kwargs) @@ -323,12 +319,11 @@ def preserve_fn(f): # 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.) - res.addBoth(reset_context) + res.addBoth(_set_context_cb, LoggingContext.sentinel) return res return g -@defer.inlineCallbacks def make_deferred_yieldable(deferred): """Given a deferred, make it follow the Synapse logcontext rules: @@ -342,9 +337,16 @@ def make_deferred_yieldable(deferred): (This is more-or-less the opposite operation to preserve_fn.) """ - with PreserveLoggingContext(): - r = yield deferred - defer.returnValue(r) + if isinstance(deferred, defer.Deferred) and not deferred.called: + prev_context = LoggingContext.set_current_context(LoggingContext.sentinel) + deferred.addBoth(_set_context_cb, prev_context) + return deferred + + +def _set_context_cb(result, context): + """A callback function which just sets the logging context""" + LoggingContext.set_current_context(context) + return result # modules to ignore in `logcontext_tracer` |