[Python-checkins] cpython (merge 3.3 -> default): Forward port new tests from Issue #18851.
antoine.pitrou
python-checkins at python.org
Sat Aug 31 00:12:50 CEST 2013
http://hg.python.org/cpython/rev/290ca31d4cfe
changeset: 85467:290ca31d4cfe
parent: 85464:8f39e2f987fb
parent: 85466:c11754defe1c
user: Antoine Pitrou <solipsis at pitrou.net>
date: Sat Aug 31 00:12:37 2013 +0200
summary:
Forward port new tests from Issue #18851.
files:
Lib/test/test_subprocess.py | 34 +++++++++++++++++++++++++
1 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -22,6 +22,10 @@
import resource
except ImportError:
resource = None
+try:
+ import threading
+except ImportError:
+ threading = None
mswindows = (sys.platform == "win32")
@@ -1020,6 +1024,36 @@
if c.exception.errno not in (errno.ENOENT, errno.EACCES):
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):
# Ensure that stdout is inherited from the parent
# if stdout=PIPE is not used
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list