asyncio: Close transports on error

Fix create_datagram_endpoint(), connect_read_pipe() and connect_write_pipe():
close the transport if the task is cancelled or on error.
This commit is contained in:
Victor Stinner 2015-01-26 11:02:18 +01:00
parent 21d7533c4c
commit 2596dd0894
1 changed files with 21 additions and 3 deletions

View File

@ -723,7 +723,13 @@ class BaseEventLoop(events.AbstractEventLoop):
logger.debug("Datagram endpoint remote_addr=%r created: "
"(%r, %r)",
remote_addr, transport, protocol)
yield from waiter
try:
yield from waiter
except:
transport.close()
raise
return transport, protocol
@coroutine
@ -815,7 +821,13 @@ class BaseEventLoop(events.AbstractEventLoop):
protocol = protocol_factory()
waiter = futures.Future(loop=self)
transport = self._make_read_pipe_transport(pipe, protocol, waiter)
yield from waiter
try:
yield from waiter
except:
transport.close()
raise
if self._debug:
logger.debug('Read pipe %r connected: (%r, %r)',
pipe.fileno(), transport, protocol)
@ -826,7 +838,13 @@ class BaseEventLoop(events.AbstractEventLoop):
protocol = protocol_factory()
waiter = futures.Future(loop=self)
transport = self._make_write_pipe_transport(pipe, protocol, waiter)
yield from waiter
try:
yield from waiter
except:
transport.close()
raise
if self._debug:
logger.debug('Write pipe %r connected: (%r, %r)',
pipe.fileno(), transport, protocol)