diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-12-18 22:47:27 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-12-18 22:47:27 (GMT) |
commit | 1b9763d0a9c62c13dc2a06770032e5906b610c96 (patch) | |
tree | 5908c0aae7f5fb134d71eafd16defad46ad88474 /Lib | |
parent | dc7765d12c8b3008935659d70970ac3cd563e566 (diff) | |
download | cpython-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.py | 2 | ||||
-rw-r--r-- | Lib/asyncio/windows_events.py | 2 | ||||
-rw-r--r-- | Lib/asyncio/windows_utils.py | 7 |
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 |