tinterface.mark_ready: handle cancellation - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 2039c07a2d79e0d151224339134360caa34bed92 DIR parent 1419a5c60d7dc3b0f45846c3d5873b4b32d147b1 HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 12 Sep 2018 18:45:15 +0200 interface.mark_ready: handle cancellation Diffstat: M electrum/interface.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) --- DIR diff --git a/electrum/interface.py b/electrum/interface.py t@@ -252,17 +252,23 @@ class Interface(PrintError): assert False def mark_ready(self): + if self.ready.cancelled(): + self.close() + raise asyncio.CancelledError() + if self.ready.done(): + return + assert self.tip_header chain = blockchain.check_header(self.tip_header) if not chain: self.blockchain = blockchain.blockchains[0] else: self.blockchain = chain + assert self.blockchain is not None self.print_error("set blockchain with height", self.blockchain.height()) - if not self.ready.done(): - self.ready.set_result(1) + self.ready.set_result(1) async def save_certificate(self): if not os.path.exists(self.cert_path): t@@ -349,8 +355,7 @@ class Interface(PrintError): self.tip = height if self.tip < constants.net.max_checkpoint(): raise GracefulDisconnect('server tip below max checkpoint') - if not self.ready.done(): - self.mark_ready() + self.mark_ready() async with self.network.bhi_lock: if self.blockchain.height() < header['block_height']-1: _, height = await self.sync_until(height, None)