diff options
author | Richard Oudkerk <shibturn@gmail.com> | 2012-05-05 18:45:37 (GMT) |
---|---|---|
committer | Richard Oudkerk <shibturn@gmail.com> | 2012-05-05 18:45:37 (GMT) |
commit | fdb8dcf675427dc1ed710c8e1165cc6f87655a2c (patch) | |
tree | 1aefe1f3d944170e7e1d71a2b8cf22e013ecd1cd /Lib/multiprocessing/connection.py | |
parent | 7a919e993052deec2826d6ba823156c805b1a9d9 (diff) | |
download | cpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.zip cpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.tar.gz cpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.tar.bz2 |
Fix for Issue 14725 for 3.3 branch.
Diffstat (limited to 'Lib/multiprocessing/connection.py')
-rw-r--r-- | Lib/multiprocessing/connection.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 046a7fc..acf43b1 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -621,16 +621,24 @@ if sys.platform == 'win32': def accept(self): self._handle_queue.append(self._new_handle()) handle = self._handle_queue.pop(0) - ov = _winapi.ConnectNamedPipe(handle, overlapped=True) try: - res = _winapi.WaitForMultipleObjects([ov.event], False, INFINITE) - except: - ov.cancel() - _winapi.CloseHandle(handle) - raise - finally: - _, err = ov.GetOverlappedResult(True) - assert err == 0 + ov = _winapi.ConnectNamedPipe(handle, overlapped=True) + except OSError as e: + if e.winerror != _winapi.ERROR_NO_DATA: + raise + # ERROR_NO_DATA can occur if a client has already connected, + # written data and then disconnected -- see Issue 14725. + else: + try: + res = _winapi.WaitForMultipleObjects( + [ov.event], False, INFINITE) + except: + ov.cancel() + _winapi.CloseHandle(handle) + raise + finally: + _, err = ov.GetOverlappedResult(True) + assert err == 0 return PipeConnection(handle) @staticmethod |