From e4bd445a385e9cd85dfb202c4e597aea4b9e818c Mon Sep 17 00:00:00 2001 From: SomberNight Date: Thu, 13 Sep 2018 20:50:32 +0200 Subject: [PATCH] network.new_interface: clarify how timed out interfaces are closed --- electrum/interface.py | 3 +-- electrum/network.py | 6 ++++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index a7195fb40..932be1969 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -264,8 +264,7 @@ class Interface(PrintError): def mark_ready(self): if self.ready.cancelled(): - self.close() - raise asyncio.CancelledError() + raise GracefulDisconnect('conn establishment was too slow; *ready* future was cancelled') if self.ready.done(): return diff --git a/electrum/network.py b/electrum/network.py index 7fef60939..61b4e5c2e 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -630,6 +630,12 @@ class Network(PrintError): #import traceback #traceback.print_exc() self.print_error(interface.server, "couldn't launch because", str(e), str(type(e))) + # note: connection_down will not call interface.close() as + # interface is not yet in self.interfaces. OTOH, calling + # interface.close() here will sometimes raise deep inside the + # asyncio internal select.select... instead, interface will close + # itself when it detects the cancellation of interface.ready; + # however this might take several seconds... self.connection_down(interface.server) return finally: