mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 22:14:55 -04:00
Fix make_deferred_yieldable to work with coroutines
This commit is contained in:
parent
0f3614f0f6
commit
9a2223d4c8
2 changed files with 32 additions and 1 deletions
|
@ -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,11 @@ 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 need to convert it to a deferred so that
|
||||
# we can attach callbacks (and not immediately return).
|
||||
deferred = defer.ensureDeferred(deferred)
|
||||
|
||||
if not isinstance(deferred, defer.Deferred):
|
||||
return deferred
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue