electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit f265acd2348697170ec7d23af69ebb7af91de0e7
parent 6d86f4dc18faaafd9f184c97c3433ec3313c7d69
Author: SomberNight <somber.night@protonmail.com>
Date:   Mon, 31 Aug 2020 22:17:44 +0200

DeviceMgr.scan_devices: do all scanning on hidapi thread

e.g. the trezor custom enumerate function calls hid.enumerate() which is not thread safe (?).
see comment on line 330

Diffstat:
Melectrum/plugin.py | 5++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/electrum/plugin.py b/electrum/plugin.py @@ -682,6 +682,7 @@ class DeviceMgr(ThreadJob): return devices @with_scan_lock + @profiler def scan_devices(self) -> Sequence['Device']: self.logger.info("scanning devices...") @@ -692,8 +693,10 @@ class DeviceMgr(ThreadJob): with self.lock: enumerate_funcs = list(self._enumerate_func) for f in enumerate_funcs: + # custom enumerate functions might use hidapi, so use hid thread to be safe + new_devices_fut = _hid_executor.submit(f) try: - new_devices = f() + new_devices = new_devices_fut.result() except BaseException as e: self.logger.error('custom device enum failed. func {}, error {}' .format(str(f), repr(e)))