mirror of https://github.com/python/cpython
Fix for issue 14725 for 2.7 branch
This commit is contained in:
parent
c642f67c63
commit
9a16fa69dd
|
@ -348,7 +348,10 @@ if sys.platform == 'win32':
|
|||
try:
|
||||
win32.ConnectNamedPipe(handle, win32.NULL)
|
||||
except WindowsError, e:
|
||||
if e.args[0] != win32.ERROR_PIPE_CONNECTED:
|
||||
# ERROR_NO_DATA can occur if a client has already connected,
|
||||
# written data and then disconnected -- see Issue 14725.
|
||||
if e.args[0] not in (win32.ERROR_PIPE_CONNECTED,
|
||||
win32.ERROR_NO_DATA):
|
||||
raise
|
||||
return _multiprocessing.PipeConnection(handle)
|
||||
|
||||
|
|
|
@ -1669,6 +1669,23 @@ class _TestListenerClient(BaseTestCase):
|
|||
self.assertEqual(conn.recv(), 'hello')
|
||||
p.join()
|
||||
l.close()
|
||||
|
||||
def test_issue14725(self):
|
||||
l = self.connection.Listener()
|
||||
p = self.Process(target=self._test, args=(l.address,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
time.sleep(1)
|
||||
# On Windows the client process should by now have connected,
|
||||
# written data and closed the pipe handle by now. This causes
|
||||
# ConnectNamdedPipe() to fail with ERROR_NO_DATA. See Issue
|
||||
# 14725.
|
||||
conn = l.accept()
|
||||
self.assertEqual(conn.recv(), 'hello')
|
||||
conn.close()
|
||||
p.join()
|
||||
l.close()
|
||||
|
||||
#
|
||||
# Test of sending connection and socket objects between processes
|
||||
#
|
||||
|
|
|
@ -244,6 +244,7 @@ create_win32_namespace(void)
|
|||
Py_INCREF(&Win32Type);
|
||||
|
||||
WIN32_CONSTANT(F_DWORD, ERROR_ALREADY_EXISTS);
|
||||
WIN32_CONSTANT(F_DWORD, ERROR_NO_DATA);
|
||||
WIN32_CONSTANT(F_DWORD, ERROR_PIPE_BUSY);
|
||||
WIN32_CONSTANT(F_DWORD, ERROR_PIPE_CONNECTED);
|
||||
WIN32_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT);
|
||||
|
|
Loading…
Reference in New Issue