summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-12-18 22:47:27 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-12-18 22:47:27 (GMT)
commit1b9763d0a9c62c13dc2a06770032e5906b610c96 (patch)
tree5908c0aae7f5fb134d71eafd16defad46ad88474 /Lib
parentdc7765d12c8b3008935659d70970ac3cd563e566 (diff)
downloadcpython-1b9763d0a9c62c13dc2a06770032e5906b610c96.zip
cpython-1b9763d0a9c62c13dc2a06770032e5906b610c96.tar.gz
cpython-1b9763d0a9c62c13dc2a06770032e5906b610c96.tar.bz2
asyncio: sync with Tulip
* Fix a race condition in BaseSubprocessTransport._try_finish(). If the process exited before the _post_init() method was called, scheduling the call to _call_connection_lost() with call_soon() is wrong: connection_made() must be called before connection_lost(). Reuse the BaseSubprocessTransport._call() method to schedule the call to _call_connection_lost() to ensure that connection_made() and connection_lost() are called in the correct order. * Add repr(PipeHandle) * Fix typo
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/base_subprocess.py2
-rw-r--r--Lib/asyncio/windows_events.py2
-rw-r--r--Lib/asyncio/windows_utils.py7
3 files changed, 9 insertions, 2 deletions
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
index d008779..81698b0 100644
--- a/Lib/asyncio/base_subprocess.py
+++ b/Lib/asyncio/base_subprocess.py
@@ -153,7 +153,7 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
if all(p is not None and p.disconnected
for p in self._pipes.values()):
self._finished = True
- self._loop.call_soon(self._call_connection_lost, None)
+ self._call(self._call_connection_lost, None)
def _call_connection_lost(self, exc):
try:
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
index 6763f0b..0773d06 100644
--- a/Lib/asyncio/windows_events.py
+++ b/Lib/asyncio/windows_events.py
@@ -402,7 +402,7 @@ class IocpProactor:
ov.getresult()
return pipe
- # FIXME: Tulip issue 196: why to we neeed register=False?
+ # FIXME: Tulip issue 196: why do we need register=False?
# See also the comment in the _register() method
return self._register(ov, pipe, finish_accept_pipe,
register=False)
diff --git a/Lib/asyncio/windows_utils.py b/Lib/asyncio/windows_utils.py
index 1155a77..c6e4bc9 100644
--- a/Lib/asyncio/windows_utils.py
+++ b/Lib/asyncio/windows_utils.py
@@ -134,6 +134,13 @@ class PipeHandle:
def __init__(self, handle):
self._handle = handle
+ def __repr__(self):
+ if self._handle != -1:
+ handle = 'handle=%r' % self._handle
+ else:
+ handle = 'closed'
+ return '<%s %s>' % (self.__class__.__name__, handle)
+
@property
def handle(self):
return self._handle