[FIX] hw_drivers: Start iot_devices thread after registering it

This commit was originally part of a larger commit related to an
Ingenico double connection deadlock bugfix in V13, but in V14 most of
the related code has moved to enterprise. When a driver thread is
running, calling `disconnect` on it will delete it from iot_devices. If
the driver thread gets added to iot_devices in the Interface thread
after starting it, this means there is a tiny window of time where
`disconnect` could be called and the thread wouldn't be in iot_devices
yet, resulting in an exception. This change puts the driver thread in
iot_devices before starting it, avoiding that scenario and the need to
check in `disconnect` for that happening.

X-original-commit: 6c24d30c3910e67ed751327d1554e2e8cf5e958b
This commit is contained in:
Raf Geens
2021-05-12 08:38:01 +00:00
parent 1e764eb2b2
commit ec1f064b09
+5 -1
View File
@@ -51,8 +51,12 @@ class Interface(Thread, metaclass=InterfaceMetaClass):
_logger.info('Device %s is now connected', identifier)
d = driver(identifier, devices[identifier])
d.daemon = True
d.start()
iot_devices[identifier] = d
# Start the thread after creating the iot_devices entry so the
# thread can assume the iot_devices entry will exist while it's
# running, at least until the `disconnect` above gets triggered
# when `removed` is not empty.
d.start()
break
def get_devices(self):