Forward port new tests from Issue #18851.
This commit is contained in:
parent
9939cc89a4
commit
a8392717f1
@ -22,6 +22,10 @@ try:
|
|||||||
import resource
|
import resource
|
||||||
except ImportError:
|
except ImportError:
|
||||||
resource = None
|
resource = None
|
||||||
|
try:
|
||||||
|
import threading
|
||||||
|
except ImportError:
|
||||||
|
threading = None
|
||||||
|
|
||||||
mswindows = (sys.platform == "win32")
|
mswindows = (sys.platform == "win32")
|
||||||
|
|
||||||
@ -987,6 +991,36 @@ class ProcessTestCase(BaseTestCase):
|
|||||||
if c.exception.errno not in (errno.ENOENT, errno.EACCES):
|
if c.exception.errno not in (errno.ENOENT, errno.EACCES):
|
||||||
raise c.exception
|
raise c.exception
|
||||||
|
|
||||||
|
@unittest.skipIf(threading is None, "threading required")
|
||||||
|
def test_double_close_on_error(self):
|
||||||
|
# Issue #18851
|
||||||
|
fds = []
|
||||||
|
def open_fds():
|
||||||
|
for i in range(20):
|
||||||
|
fds.extend(os.pipe())
|
||||||
|
time.sleep(0.001)
|
||||||
|
t = threading.Thread(target=open_fds)
|
||||||
|
t.start()
|
||||||
|
try:
|
||||||
|
with self.assertRaises(EnvironmentError):
|
||||||
|
subprocess.Popen(['nonexisting_i_hope'],
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE)
|
||||||
|
finally:
|
||||||
|
t.join()
|
||||||
|
exc = None
|
||||||
|
for fd in fds:
|
||||||
|
# If a double close occurred, some of those fds will
|
||||||
|
# already have been closed by mistake, and os.close()
|
||||||
|
# here will raise.
|
||||||
|
try:
|
||||||
|
os.close(fd)
|
||||||
|
except OSError as e:
|
||||||
|
exc = e
|
||||||
|
if exc is not None:
|
||||||
|
raise exc
|
||||||
|
|
||||||
def test_issue8780(self):
|
def test_issue8780(self):
|
||||||
# Ensure that stdout is inherited from the parent
|
# Ensure that stdout is inherited from the parent
|
||||||
# if stdout=PIPE is not used
|
# if stdout=PIPE is not used
|
||||||
|
Loading…
x
Reference in New Issue
Block a user