summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-01-29 22:22:56 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-01-29 22:22:56 (GMT)
commitaaabc4fdcaa5918ce3499a186ffbafde4af82f11 (patch)
tree32bb97bf46741fc4b7137996d3bfd44fbcec9d7e /Lib
parent47fb97e4e6b3d11435bd0051a1203ee7b3bea34f (diff)
downloadcpython-aaabc4fdcaa5918ce3499a186ffbafde4af82f11.zip
cpython-aaabc4fdcaa5918ce3499a186ffbafde4af82f11.tar.gz
cpython-aaabc4fdcaa5918ce3499a186ffbafde4af82f11.tar.bz2
asyncio: Get rid of _try_connected().
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/base_subprocess.py32
1 files changed, 14 insertions, 18 deletions
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
index c5efda7..cc4f8cb 100644
--- a/Lib/asyncio/base_subprocess.py
+++ b/Lib/asyncio/base_subprocess.py
@@ -75,19 +75,27 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
proc = self._proc
loop = self._loop
if proc.stdin is not None:
- transp, proto = yield from loop.connect_write_pipe(
+ _, pipe = yield from loop.connect_write_pipe(
lambda: WriteSubprocessPipeProto(self, STDIN),
proc.stdin)
+ self._pipes[STDIN] = pipe
if proc.stdout is not None:
- transp, proto = yield from loop.connect_read_pipe(
+ _, pipe = yield from loop.connect_read_pipe(
lambda: ReadSubprocessPipeProto(self, STDOUT),
proc.stdout)
+ self._pipes[STDOUT] = pipe
if proc.stderr is not None:
- transp, proto = yield from loop.connect_read_pipe(
+ _, pipe = yield from loop.connect_read_pipe(
lambda: ReadSubprocessPipeProto(self, STDERR),
proc.stderr)
- if not self._pipes:
- self._try_connected()
+ self._pipes[STDERR] = pipe
+
+ assert self._pending_calls is not None
+
+ self._loop.call_soon(self._protocol.connection_made, self)
+ for callback, data in self._pending_calls:
+ self._loop.call_soon(callback, *data)
+ self._pending_calls = None
def _call(self, cb, *data):
if self._pending_calls is not None:
@@ -95,14 +103,6 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
else:
self._loop.call_soon(cb, *data)
- def _try_connected(self):
- assert self._pending_calls is not None
- if all(p is not None and p.connected for p in self._pipes.values()):
- self._loop.call_soon(self._protocol.connection_made, self)
- for callback, data in self._pending_calls:
- self._loop.call_soon(callback, *data)
- self._pending_calls = None
-
def _pipe_connection_lost(self, fd, exc):
self._call(self._protocol.pipe_connection_lost, fd, exc)
self._try_finish()
@@ -136,19 +136,15 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
class WriteSubprocessPipeProto(protocols.BaseProtocol):
- pipe = None
def __init__(self, proc, fd):
self.proc = proc
self.fd = fd
- self.connected = False
+ self.pipe = None
self.disconnected = False
- proc._pipes[fd] = self
def connection_made(self, transport):
- self.connected = True
self.pipe = transport
- self.proc._try_connected()
def connection_lost(self, exc):
self.disconnected = True