diff --git a/src/trezor/utils.py b/src/trezor/utils.py index ca2eab057..4673c6aff 100644 --- a/src/trezor/utils.py +++ b/src/trezor/utils.py @@ -4,18 +4,24 @@ import gc from trezorutils import halt, memcpy, set_mode_unprivileged, symbol, model # noqa: F401 -def unimport(genfunc): - async def inner(*args, **kwargs): - mods = set(sys.modules) - try: - ret = await genfunc(*args, **kwargs) - finally: - for mod in sys.modules: - if mod not in mods: - del sys.modules[mod] - gc.collect() - return ret - return inner +def unimport_begin(): + return set(sys.modules) + + +def unimport_end(mods): + for mod in sys.modules: + if mod not in mods: + # remove reference from sys.modules + del sys.modules[mod] + # remove reference from the parent module + i = mod.rfind('.') + if i < 0: + continue + path = mod[:i] + name = mod[i + 1:] + delattr(sys.modules[path], name) + # collect removed modules + gc.collect() def ensure(cond, msg=None):