diff options
author | Erik Johnston <erik@matrix.org> | 2019-10-10 10:58:32 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2019-10-10 10:58:32 +0100 |
commit | 3e4272961a4cb659513bccd981cbd42f4e506362 (patch) | |
tree | cc57f13dc0a87861678e52f99cccb63cf3b1895f /synapse/util | |
parent | Move patch_inline_callbacks into synapse/ (diff) | |
download | synapse-3e4272961a4cb659513bccd981cbd42f4e506362.tar.xz |
Test for sentinel commit
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/patch_inline_callbacks.py | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/synapse/util/patch_inline_callbacks.py b/synapse/util/patch_inline_callbacks.py index 4fb49b0b2b..4a45824f52 100644 --- a/synapse/util/patch_inline_callbacks.py +++ b/synapse/util/patch_inline_callbacks.py @@ -146,13 +146,30 @@ def _check_yield_points(f, changes, start_context): # raise Exception(err) return getattr(e, "value", None) + frame = gen.gi_frame + + if isinstance(d, defer.Deferred): + # This happens if we yield on a deferred that doesn't follow + # the log context rules without wrappin in a `make_deferred_yieldable` + if LoggingContext.current_context() != LoggingContext.Sentinel: + err = ( + "%s yielded with context %s rather than Sentinel," + " yielded on line %d in %s" + % ( + frame.f_code.co_name, + start_context, + LoggingContext.current_context(), + frame.f_lineno, + frame.f_code.co_filename, + ) + ) + changes.append(err) + try: result = yield d except Exception as e: result = Failure(e) - frame = gen.gi_frame - if LoggingContext.current_context() != expected_context: # This happens because the context is lost sometime *after* the # previous yield and *after* the current yield. E.g. the |