Properly handle shutdown sequence in both prototype and dbus service.
This commit is contained in:
parent
7f14da61a8
commit
746ef2888d
4 changed files with 27 additions and 21 deletions
|
|
@ -159,10 +159,6 @@ usb.trace_enabled = True
|
|||
tls.trace_enabled = True
|
||||
|
||||
svc = Device()
|
||||
try:
|
||||
loop.run()
|
||||
finally:
|
||||
reboot()
|
||||
raise
|
||||
loop.run()
|
||||
|
||||
print("Normal exit")
|
||||
|
|
|
|||
|
|
@ -1,16 +1,33 @@
|
|||
|
||||
import atexit
|
||||
|
||||
from proto9x.usb import usb
|
||||
from proto9x.tls import tls
|
||||
from proto9x.sensor import sensor
|
||||
from proto9x.sensor import reboot
|
||||
from proto9x.flash import read_tls_flash
|
||||
from usb import core as usb_core
|
||||
|
||||
def close():
|
||||
if usb.dev is not None:
|
||||
# Send the reboot command before closing the device.
|
||||
# Without it the sensor seems to keep creating new TLS sessions and eventually runs out of memory.
|
||||
# The reboot command may fail if we're shutting down because the device is already gone.
|
||||
try:
|
||||
reboot()
|
||||
finally:
|
||||
usb.close()
|
||||
|
||||
def open():
|
||||
usb.open()
|
||||
usb.send_init()
|
||||
# We must register atexit only after we opened usb device,
|
||||
# so that our handler is called before pyusb's one and we can still talk to the device
|
||||
atexit.register(close)
|
||||
|
||||
tls.parseTlsFlash(read_tls_flash())
|
||||
tls.open()
|
||||
|
||||
sensor.open()
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,14 @@ class Usb():
|
|||
self.thread.daemon = True
|
||||
self.thread.start()
|
||||
|
||||
def close(self):
|
||||
if self.dev is not None:
|
||||
try:
|
||||
self.dev.reset()
|
||||
self.dev = None
|
||||
finally:
|
||||
self.thread.join()
|
||||
|
||||
def usb_dev(self):
|
||||
return self.dev
|
||||
|
||||
|
|
|
|||
15
prototype.py
15
prototype.py
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
from proto9x.tls import tls
|
||||
from proto9x.usb import usb
|
||||
from proto9x.db import db
|
||||
|
|
@ -80,17 +79,3 @@ def enroll(sid, finger):
|
|||
|
||||
print('Created a finger record with dbid %d' % recid)
|
||||
|
||||
# can't use atexit as it conflicts with atexit installed by libusb
|
||||
class Blah:
|
||||
def __init__(self):
|
||||
self.tls=tls
|
||||
|
||||
def __del__(self):
|
||||
if usb.dev is not None:
|
||||
print('Rebooting device...')
|
||||
try:
|
||||
reboot()
|
||||
except:
|
||||
pass
|
||||
|
||||
blah=Blah()
|
||||
|
|
|
|||
Loading…
Reference in a new issue