From 2039c07a2d79e0d151224339134360caa34bed92 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 12 Sep 2018 18:45:15 +0200 Subject: [PATCH] interface.mark_ready: handle cancellation --- electrum/interface.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index a2e1dd179..52b54d7c5 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -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): @@ -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)