summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-08-10 14:45:38 (GMT)
committerGitHub <noreply@github.com>2017-08-10 14:45:38 (GMT)
commit1247e2cda514d7a73187e0b53ec8c35d87a34a84 (patch)
tree97ee4cbf3a21666ea8ab80eb77365e73bc8a5b60 /Lib
parent693790817a93701093ef93333be7abbb0d6d4309 (diff)
downloadcpython-1247e2cda514d7a73187e0b53ec8c35d87a34a84.zip
cpython-1247e2cda514d7a73187e0b53ec8c35d87a34a84.tar.gz
cpython-1247e2cda514d7a73187e0b53ec8c35d87a34a84.tar.bz2
[2.7] bpo-31160: Backport reap_children fixes from master to 2.7 (#3063)
* bpo-31160: regrtest now reaps child processes (#3044) Add a post_test_cleanup() function which currently only calls support.reap_children(). (cherry picked from commit e3510d74aacc477c30f42f2b941d69689bbc478e) * bpo-31160: test_tempfile: Fix reap_children() warning (#3056) TestRandomNameSequence.test_process_awareness() now calls os.waitpid() to avoid leaking a zombie process. (cherry picked from commit 6c8c2943d996b59a48d331f61f22cbe72933910e)
Diffstat (limited to 'Lib')
-rwxr-xr-xLib/test/regrtest.py4
-rw-r--r--Lib/test/test_tempfile.py7
2 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 7a48475..7096de8 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -1172,6 +1172,9 @@ class saved_test_environment:
return False
+def post_test_cleanup():
+ test_support.reap_children()
+
def runtest_inner(test, verbose, quiet, huntrleaks=False, pgo=False, testdir=None):
test_support.unload(test)
if verbose:
@@ -1205,6 +1208,7 @@ def runtest_inner(test, verbose, quiet, huntrleaks=False, pgo=False, testdir=Non
refleak = dash_R(the_module, test, indirect_test,
huntrleaks)
test_time = time.time() - start_time
+ post_test_cleanup()
finally:
sys.stdout = save_stdout
except test_support.ResourceDenied, msg:
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 5c85cc9..5c111a2 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -141,12 +141,15 @@ class test__RandomNameSequence(TC):
try:
pid = os.fork()
if not pid:
+ # child process
os.close(read_fd)
os.write(write_fd, next(self.r).encode("ascii"))
os.close(write_fd)
# bypass the normal exit handlers- leave those to
# the parent.
os._exit(0)
+
+ # parent process
parent_value = next(self.r)
child_value = os.read(read_fd, len(parent_value)).decode("ascii")
finally:
@@ -157,6 +160,10 @@ class test__RandomNameSequence(TC):
os.kill(pid, signal.SIGKILL)
except EnvironmentError:
pass
+
+ # Read the process exit status to avoid zombie process
+ os.waitpid(pid, 0)
+
os.close(read_fd)
os.close(write_fd)
self.assertNotEqual(child_value, parent_value)