1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-18 05:28:40 +00:00

core: make sure that auto-lock shuts down running workflows

This commit is contained in:
matejcik 2020-05-19 14:56:22 +02:00 committed by matejcik
parent 2d0206c043
commit 42e7c43c7c
2 changed files with 20 additions and 2 deletions

View File

@ -103,7 +103,6 @@ async def handle_Cancel(ctx: wire.Context, msg: Cancel) -> NoReturn:
async def handle_LockDevice(ctx: wire.Context, msg: LockDevice) -> Success:
lock_device()
workflow.kill_default() # this restarts the homescreen to show lock icon
return Success()
@ -145,8 +144,9 @@ def set_homescreen() -> None:
def lock_device() -> None:
if config.has_pin():
config.lock()
set_homescreen()
wire.find_handler = get_pinlocked_handler
set_homescreen()
workflow.close_others()
async def unlock_device(ctx: wire.GenericContext = wire.DUMMY_CONTEXT) -> None:

View File

@ -113,6 +113,24 @@ def kill_default() -> None:
loop.close(default_task)
def close_others() -> None:
"""Shut down all running tasks, except the one that is currently executing, and
restart the default."""
try:
kill_default()
# if no other tasks are running, start_default will run immediately
except ValueError:
pass
# we need a local copy of tasks because processing task.close() modifies
# the global instance
for task in list(tasks):
if not task.is_running():
task.close()
# if tasks were running, closing the last of them will run start_default
def _finalize_default(task: loop.Task, value: Any) -> None:
"""Finalizer for the default task. Cleans up globals and restarts the default
in case no other task is running."""