mirror of https://github.com/python/cpython.git
Fix for issue 14725 for 3.2 branch
This commit is contained in:
parent
16f6f8338b
commit
7ef909cdd7
|
@ -360,7 +360,10 @@ def accept(self):
|
||||||
try:
|
try:
|
||||||
win32.ConnectNamedPipe(handle, win32.NULL)
|
win32.ConnectNamedPipe(handle, win32.NULL)
|
||||||
except WindowsError as e:
|
except WindowsError as 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
|
raise
|
||||||
return _multiprocessing.PipeConnection(handle)
|
return _multiprocessing.PipeConnection(handle)
|
||||||
|
|
||||||
|
|
|
@ -1732,6 +1732,23 @@ def test_listener_client(self):
|
||||||
self.assertEqual(conn.recv(), 'hello')
|
self.assertEqual(conn.recv(), 'hello')
|
||||||
p.join()
|
p.join()
|
||||||
l.close()
|
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
|
# Test of sending connection and socket objects between processes
|
||||||
#
|
#
|
||||||
|
|
|
@ -244,6 +244,7 @@ create_win32_namespace(void)
|
||||||
Py_INCREF(&Win32Type);
|
Py_INCREF(&Win32Type);
|
||||||
|
|
||||||
WIN32_CONSTANT(F_DWORD, ERROR_ALREADY_EXISTS);
|
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_BUSY);
|
||||||
WIN32_CONSTANT(F_DWORD, ERROR_PIPE_CONNECTED);
|
WIN32_CONSTANT(F_DWORD, ERROR_PIPE_CONNECTED);
|
||||||
WIN32_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT);
|
WIN32_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT);
|
||||||
|
|
Loading…
Reference in New Issue