From ce58dc7b166a4859f7e6e3483ac59fa679d78be9 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Mon, 21 Feb 2011 21:55:48 +0000 Subject: [PATCH] Issue #10826: Prevent sporadic failure in test_subprocess on Solaris due to open door files. --- Lib/test/subprocessdata/fd_status.py | 24 ++++++++++++------------ Lib/test/test_subprocess.py | 7 ------- Misc/NEWS | 3 +++ 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Lib/test/subprocessdata/fd_status.py b/Lib/test/subprocessdata/fd_status.py index 083b2f9ec55..1f61e13a345 100644 --- a/Lib/test/subprocessdata/fd_status.py +++ b/Lib/test/subprocessdata/fd_status.py @@ -3,22 +3,22 @@ file descriptors on stdout.""" import errno import os -import fcntl try: _MAXFD = os.sysconf("SC_OPEN_MAX") except: _MAXFD = 256 -def isopen(fd): - """Return True if the fd is open, and False otherwise""" - try: - fcntl.fcntl(fd, fcntl.F_GETFD, 0) - except IOError as e: - if e.errno == errno.EBADF: - return False - raise - return True - if __name__ == "__main__": - print(','.join(str(fd) for fd in range(0, _MAXFD) if isopen(fd))) + fds = [] + for fd in range(0, _MAXFD): + try: + st = os.fstat(fd) + except OSError as e: + if e.errno == errno.EBADF: + continue + raise + # Ignore Solaris door files + if st.st_mode & 0xF000 != 0xd000: + fds.append(fd) + print(','.join(map(str, fds))) diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index cf6684d816b..4b583084979 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -1156,9 +1156,6 @@ class POSIXProcessTestCase(BaseTestCase): open_fds = set() - if support.verbose: - print(" -- maxfd =", subprocess.MAXFD) - for x in range(5): fds = os.pipe() self.addCleanup(os.close, fds[0]) @@ -1173,10 +1170,6 @@ class POSIXProcessTestCase(BaseTestCase): remaining_fds = set(map(int, output.split(b','))) to_be_closed = open_fds - {fd} - # Temporary debug output for intermittent failures - if support.verbose: - print(" -- fds that should have been closed:", to_be_closed) - print(" -- fds that remained open:", remaining_fds) self.assertIn(fd, remaining_fds, "fd to be passed not passed") self.assertFalse(remaining_fds & to_be_closed, diff --git a/Misc/NEWS b/Misc/NEWS index 5f2f99c71da..14f0f5fd970 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -45,6 +45,9 @@ Build Tests ----- +- Issue #10826: Prevent sporadic failure in test_subprocess on Solaris due + to open door files. + - Issue #10990: Prevent tests from clobbering a set trace function.