network.new_interface: clarify how timed out interfaces are closed
This commit is contained in:
@@ -264,8 +264,7 @@ class Interface(PrintError):
|
|||||||
|
|
||||||
def mark_ready(self):
|
def mark_ready(self):
|
||||||
if self.ready.cancelled():
|
if self.ready.cancelled():
|
||||||
self.close()
|
raise GracefulDisconnect('conn establishment was too slow; *ready* future was cancelled')
|
||||||
raise asyncio.CancelledError()
|
|
||||||
if self.ready.done():
|
if self.ready.done():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -630,6 +630,12 @@ class Network(PrintError):
|
|||||||
#import traceback
|
#import traceback
|
||||||
#traceback.print_exc()
|
#traceback.print_exc()
|
||||||
self.print_error(interface.server, "couldn't launch because", str(e), str(type(e)))
|
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)
|
self.connection_down(interface.server)
|
||||||
return
|
return
|
||||||
finally:
|
finally:
|
||||||
|
|||||||
Reference in New Issue
Block a user