[Python-checkins] cpython (3.5): Fix ordering issues in UNIX read/write pipe transport constructors.

guido.van.rossum python-checkins at python.org
Wed Aug 31 12:53:32 EDT 2016


https://hg.python.org/cpython/rev/dfaa38a8c7ec
changeset:   102974:dfaa38a8c7ec
branch:      3.5
user:        Guido van Rossum <guido at python.org>
date:        Wed Aug 31 09:42:38 2016 -0700
summary:
  Fix ordering issues in UNIX read/write pipe transport constructors.

Upstream https://github.com/python/asyncio/pull/408 by Ron Frederick.

files:
  Lib/asyncio/unix_events.py |  23 +++++++++++++++++------
  1 files changed, 17 insertions(+), 6 deletions(-)


diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -305,14 +305,20 @@
         self._loop = loop
         self._pipe = pipe
         self._fileno = pipe.fileno()
+        self._protocol = protocol
+        self._closing = False
+
         mode = os.fstat(self._fileno).st_mode
         if not (stat.S_ISFIFO(mode) or
                 stat.S_ISSOCK(mode) or
                 stat.S_ISCHR(mode)):
+            self._pipe = None
+            self._fileno = None
+            self._protocol = None
             raise ValueError("Pipe transport is for pipes/sockets only.")
+
         _set_nonblocking(self._fileno)
-        self._protocol = protocol
-        self._closing = False
+
         self._loop.call_soon(self._protocol.connection_made, self)
         # only start reading when connection_made() has been called
         self._loop.call_soon(self._loop.add_reader,
@@ -421,18 +427,23 @@
         self._extra['pipe'] = pipe
         self._pipe = pipe
         self._fileno = pipe.fileno()
+        self._protocol = protocol
+        self._buffer = []
+        self._conn_lost = 0
+        self._closing = False  # Set when close() or write_eof() called.
+
         mode = os.fstat(self._fileno).st_mode
         is_char = stat.S_ISCHR(mode)
         is_fifo = stat.S_ISFIFO(mode)
         is_socket = stat.S_ISSOCK(mode)
         if not (is_char or is_fifo or is_socket):
+            self._pipe = None
+            self._fileno = None
+            self._protocol = None
             raise ValueError("Pipe transport is only for "
                              "pipes, sockets and character devices")
+
         _set_nonblocking(self._fileno)
-        self._protocol = protocol
-        self._buffer = []
-        self._conn_lost = 0
-        self._closing = False  # Set when close() or write_eof() called.
 
         self._loop.call_soon(self._protocol.connection_made, self)
 

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


More information about the Python-checkins mailing list