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: