mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-22 15:38:11 +00:00
adopt wire dispatching, log removed modules
This commit is contained in:
parent
e9c7a67c73
commit
883b392fdb
@ -9,5 +9,5 @@ def get_protobuf_type_name(wire_type):
|
|||||||
|
|
||||||
def get_protobuf_type(wire_type):
|
def get_protobuf_type(wire_type):
|
||||||
name = get_protobuf_type_name(wire_type)
|
name = get_protobuf_type_name(wire_type)
|
||||||
module = __import__('.%s' % name, globals(), locals(), (name,), 1)
|
module = __import__('.%s' % name, None, None, (name,), 1)
|
||||||
return getattr(module, name)
|
return getattr(module, name)
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
import gc
|
||||||
|
|
||||||
|
from trezor import log
|
||||||
|
|
||||||
type_gen = type((lambda: (yield))())
|
type_gen = type((lambda: (yield))())
|
||||||
type_genfunc = type((lambda: (yield)))
|
type_genfunc = type((lambda: (yield)))
|
||||||
@ -11,19 +14,25 @@ def _unimport_func(func):
|
|||||||
ret = func(*args, **kwargs)
|
ret = func(*args, **kwargs)
|
||||||
finally:
|
finally:
|
||||||
for to_remove in set(sys.modules) - mods:
|
for to_remove in set(sys.modules) - mods:
|
||||||
|
print('removing module', to_remove)
|
||||||
|
# log.info(__name__, 'removing module %s', to_remove)
|
||||||
del sys.modules[to_remove]
|
del sys.modules[to_remove]
|
||||||
|
gc.collect()
|
||||||
return ret
|
return ret
|
||||||
return inner
|
return inner
|
||||||
|
|
||||||
|
|
||||||
def _unimport_genfunc(genfunc):
|
def _unimport_genfunc(genfunc):
|
||||||
def inner(*args, **kwargs):
|
async def inner(*args, **kwargs):
|
||||||
mods = set(sys.modules)
|
mods = set(sys.modules)
|
||||||
try:
|
try:
|
||||||
ret = yield from genfunc(*args, **kwargs)
|
ret = await genfunc(*args, **kwargs)
|
||||||
finally:
|
finally:
|
||||||
for to_remove in set(sys.modules) - mods:
|
for to_remove in set(sys.modules) - mods:
|
||||||
|
print('removing module', to_remove)
|
||||||
|
# log.info(__name__, 'removing module %s', to_remove)
|
||||||
del sys.modules[to_remove]
|
del sys.modules[to_remove]
|
||||||
|
gc.collect()
|
||||||
return ret
|
return ret
|
||||||
return inner
|
return inner
|
||||||
|
|
||||||
@ -35,14 +44,6 @@ def unimport(func):
|
|||||||
return _unimport_func(func)
|
return _unimport_func(func)
|
||||||
|
|
||||||
|
|
||||||
def coroutine(func):
|
|
||||||
def inner(*args, **kwargs):
|
|
||||||
gen = func(*args, **kwargs)
|
|
||||||
gen.send(None)
|
|
||||||
return gen
|
|
||||||
return inner
|
|
||||||
|
|
||||||
|
|
||||||
def chunks(l, n):
|
def chunks(l, n):
|
||||||
for i in range(0, len(l), n):
|
for i in range(0, len(l), n):
|
||||||
yield l[i:i + n]
|
yield l[i:i + n]
|
||||||
|
@ -3,9 +3,9 @@ from .wire_codec import parse_report, REP_MARKER_OPEN, REP_MARKER_CLOSE
|
|||||||
|
|
||||||
|
|
||||||
def dispatch_reports_by_session(handlers,
|
def dispatch_reports_by_session(handlers,
|
||||||
open_handler,
|
open_callback,
|
||||||
close_handler,
|
close_callback,
|
||||||
fallback_handler):
|
unknown_callback):
|
||||||
'''
|
'''
|
||||||
Consumes reports adhering to the wire codec and dispatches the report
|
Consumes reports adhering to the wire codec and dispatches the report
|
||||||
payloads by between the passed handlers.
|
payloads by between the passed handlers.
|
||||||
@ -16,21 +16,21 @@ def dispatch_reports_by_session(handlers,
|
|||||||
|
|
||||||
if marker == REP_MARKER_OPEN:
|
if marker == REP_MARKER_OPEN:
|
||||||
log.debug(__name__, 'request for new session')
|
log.debug(__name__, 'request for new session')
|
||||||
open_handler.send(session_id)
|
open_callback()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif marker == REP_MARKER_CLOSE:
|
elif marker == REP_MARKER_CLOSE:
|
||||||
log.debug(__name__, 'request for closing session %d', session_id)
|
log.debug(__name__, 'request for closing session %d', session_id)
|
||||||
close_handler.send(session_id)
|
close_callback(session_id)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif session_id in handlers:
|
elif session_id not in handlers:
|
||||||
log.debug(__name__, 'report on session %d', session_id)
|
|
||||||
handler = handlers[session_id]
|
|
||||||
|
|
||||||
else:
|
|
||||||
log.debug(__name__, 'report on unknown session %d', session_id)
|
log.debug(__name__, 'report on unknown session %d', session_id)
|
||||||
handler = fallback_handler
|
unknown_callback(session_id, report_data)
|
||||||
|
continue
|
||||||
|
|
||||||
|
log.debug(__name__, 'report on session %d', session_id)
|
||||||
|
handler = handlers[session_id]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
handler.send(report_data)
|
handler.send(report_data)
|
||||||
|
Loading…
Reference in New Issue
Block a user