bpo-30121: Fix debug assert in subprocess on Windows (#1224)
* bpo-30121: Fix debug assert in subprocess on Windows This is caused by closing HANDLEs using os.close which is for CRT file descriptors and not for HANDLEs. * bpo-30121: Suppress debug assertion in test_subprocess when ran directly
This commit is contained in:
parent
a7c449b8c0
commit
4d3851727f
|
@ -727,7 +727,10 @@ class Popen(object):
|
|||
to_close.append(self._devnull)
|
||||
for fd in to_close:
|
||||
try:
|
||||
os.close(fd)
|
||||
if _mswindows and isinstance(fd, Handle):
|
||||
fd.Close()
|
||||
else:
|
||||
os.close(fd)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
@ -1007,6 +1010,9 @@ class Popen(object):
|
|||
errwrite.Close()
|
||||
if hasattr(self, '_devnull'):
|
||||
os.close(self._devnull)
|
||||
# Prevent a double close of these handles/fds from __init__
|
||||
# on error.
|
||||
self._closed_child_pipe_fds = True
|
||||
|
||||
# Retain the process handle, but close the thread handle
|
||||
self._child_created = True
|
||||
|
|
|
@ -1116,10 +1116,11 @@ class ProcessTestCase(BaseTestCase):
|
|||
p.stdin.write(line) # expect that it flushes the line in text mode
|
||||
os.close(p.stdin.fileno()) # close it without flushing the buffer
|
||||
read_line = p.stdout.readline()
|
||||
try:
|
||||
p.stdin.close()
|
||||
except OSError:
|
||||
pass
|
||||
with support.SuppressCrashReport():
|
||||
try:
|
||||
p.stdin.close()
|
||||
except OSError:
|
||||
pass
|
||||
p.stdin = None
|
||||
self.assertEqual(p.returncode, 0)
|
||||
self.assertEqual(read_line, expected)
|
||||
|
|
Loading…
Reference in New Issue