commit b1449a0a392bfa0dddf934afa041a4ee0b6995cc
parent e365eb0d85fa19acc3c1f37b2346e5178077e212
Author: SomberNight <somber.night@protonmail.com>
Date: Thu, 21 Jan 2021 03:11:15 +0100
interface.got_disconnected: change from Future to Event
Events are far easier to reason about.
Diffstat:
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/electrum/interface.py b/electrum/interface.py
@@ -351,7 +351,7 @@ class Interface(Logger):
def __init__(self, *, network: 'Network', server: ServerAddr, proxy: Optional[dict]):
self.ready = asyncio.Future()
- self.got_disconnected = asyncio.Future()
+ self.got_disconnected = asyncio.Event()
self.server = server
Logger.__init__(self)
assert network.config.path
@@ -486,8 +486,7 @@ class Interface(Logger):
self.logger.debug(f"(disconnect) trace for {repr(e)}", exc_info=True)
finally:
await self.network.connection_down(self)
- if not self.got_disconnected.done():
- self.got_disconnected.set_result(1)
+ self.got_disconnected.set()
# if was not 'ready' yet, schedule waiting coroutines:
self.ready.cancel()
return wrapper_func
diff --git a/electrum/network.py b/electrum/network.py
@@ -820,20 +820,20 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
assert iface.ready.done(), "interface not ready yet"
# try actual request
success_fut = asyncio.ensure_future(func(self, *args, **kwargs))
- await asyncio.wait([success_fut, iface.got_disconnected], return_when=asyncio.FIRST_COMPLETED)
+ await asyncio.wait([success_fut, iface.got_disconnected.wait()], return_when=asyncio.FIRST_COMPLETED)
if success_fut.done() and not success_fut.cancelled():
if success_fut.exception():
try:
raise success_fut.exception()
except RequestTimedOut:
await iface.close()
- await iface.got_disconnected
+ await iface.got_disconnected.wait()
continue # try again
except RequestCorrupted as e:
# TODO ban server?
iface.logger.exception(f"RequestCorrupted: {e}")
await iface.close()
- await iface.got_disconnected
+ await iface.got_disconnected.wait()
continue # try again
return success_fut.result()
# otherwise; try again