diff --git a/core/src/trezor/loop.py b/core/src/trezor/loop.py index 1bf13db50..82aacdf32 100644 --- a/core/src/trezor/loop.py +++ b/core/src/trezor/loop.py @@ -50,6 +50,9 @@ if __debug__: log_delay_rb_len = const(10) log_delay_rb = array.array("i", [0] * log_delay_rb_len) + # synthetic event queue + synthetic_events = [] # type: List[Tuple[int, Any]] + def schedule( task: Task, value: Any = None, deadline: int = None, finalizer: Finalizer = None @@ -125,6 +128,15 @@ def run() -> None: log_delay_rb[log_delay_pos] = delay log_delay_pos = (log_delay_pos + 1) % log_delay_rb_len + # process synthetic events + if synthetic_events: + iface, event = synthetic_events[0] + msg_tasks = _paused.pop(iface, ()) + if msg_tasks: + synthetic_events.pop(0) + for task in msg_tasks: + _step(task, event) + if io.poll(_paused, msg_entry, delay): # message received, run tasks paused on the interface msg_tasks = _paused.pop(msg_entry[0], ())