electrum

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

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:
Melectrum/interface.py | 5++---
Melectrum/network.py | 6+++---
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