diff options
| author | Raf Geens <raf@odoo.com> | 2021-05-04 12:20:33 +0000 |
|---|---|---|
| committer | lejeune quentin <qle@odoo.com> | 2021-05-10 14:11:58 +0000 |
| commit | 6c24d30c3910e67ed751327d1554e2e8cf5e958b (patch) | |
| tree | 31b2ec26c2c9325ef177b237607c4917d124cc90 | |
| parent | e1659f8a9041d409d0d303a7c12342b2e73675c7 (diff) | |
[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.
| -rw-r--r-- | addons/hw_drivers/interface.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/addons/hw_drivers/interface.py b/addons/hw_drivers/interface.py index 28ad1a55e0a..56952d1e084 100644 --- a/addons/hw_drivers/interface.py +++ b/addons/hw_drivers/interface.py @@ -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): |
