Browse Source
network.new_interface: clarify how timed out interfaces are closed
3.3.3.1
SomberNight
6 years ago
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
2 changed files with
7 additions and
2 deletions
-
electrum/interface.py
-
electrum/network.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 |
|
|
|
|
|
|
|
|
|
@ -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: |
|
|
|