[Python-checkins] cpython (3.4): asyncio: Close transports on error

victor.stinner python-checkins at python.org
Mon Jan 26 11:07:31 CET 2015


https://hg.python.org/cpython/rev/a9e3de181df4
changeset:   94298:a9e3de181df4
branch:      3.4
parent:      94296:d5e13b74d377
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Mon Jan 26 11:02:18 2015 +0100
summary:
  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.

files:
  Lib/asyncio/base_events.py |  24 +++++++++++++++++++++---
  1 files changed, 21 insertions(+), 3 deletions(-)


diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -723,7 +723,13 @@
                 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 @@
         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 @@
         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)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list