summary refs log tree commit diff
path: root/synapse/logging/context.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2019-12-11 17:01:41 +0000
committerErik Johnston <erik@matrix.org>2019-12-11 17:01:41 +0000
commit6828b47c459ea15d2815fe880616aa260a546838 (patch)
treebdcc359e06bd7f7f977c976fe1d770bd708b0f55 /synapse/logging/context.py
parentNewsfile (diff)
parentAdd `include_event_in_state` to _get_state_for_room (#6521) (diff)
downloadsynapse-6828b47c459ea15d2815fe880616aa260a546838.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into erikj/initial_sync_asnyc
Diffstat (limited to 'synapse/logging/context.py')
-rw-r--r--synapse/logging/context.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/synapse/logging/context.py b/synapse/logging/context.py
index 2c1fb9ddac..6747f29e6a 100644
--- a/synapse/logging/context.py
+++ b/synapse/logging/context.py
@@ -23,6 +23,7 @@ them.
 See doc/log_contexts.rst for details on how this works.
 """
 
+import inspect
 import logging
 import threading
 import types
@@ -612,7 +613,8 @@ def run_in_background(f, *args, **kwargs):
 
 
 def make_deferred_yieldable(deferred):
-    """Given a deferred, make it follow the Synapse logcontext rules:
+    """Given a deferred (or coroutine), make it follow the Synapse logcontext
+    rules:
 
     If the deferred has completed (or is not actually a Deferred), essentially
     does nothing (just returns another completed deferred with the
@@ -624,6 +626,13 @@ def make_deferred_yieldable(deferred):
 
     (This is more-or-less the opposite operation to run_in_background.)
     """
+    if inspect.isawaitable(deferred):
+        # If we're given a coroutine we convert it to a deferred so that we
+        # run it and find out if it immediately finishes, it it does then we
+        # don't need to fiddle with log contexts at all and can return
+        # immediately.
+        deferred = defer.ensureDeferred(deferred)
+
     if not isinstance(deferred, defer.Deferred):
         return deferred