summaryrefslogtreecommitdiffstats
path: root/Lib/multiprocessing
diff options
context:
space:
mode:
authorRichard Oudkerk <shibturn@gmail.com>2012-05-05 18:45:37 (GMT)
committerRichard Oudkerk <shibturn@gmail.com>2012-05-05 18:45:37 (GMT)
commitfdb8dcf675427dc1ed710c8e1165cc6f87655a2c (patch)
tree1aefe1f3d944170e7e1d71a2b8cf22e013ecd1cd /Lib/multiprocessing
parent7a919e993052deec2826d6ba823156c805b1a9d9 (diff)
downloadcpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.zip
cpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.tar.gz
cpython-fdb8dcf675427dc1ed710c8e1165cc6f87655a2c.tar.bz2
Fix for Issue 14725 for 3.3 branch.
Diffstat (limited to 'Lib/multiprocessing')
-rw-r--r--Lib/multiprocessing/connection.py26
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