diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-08-10 14:45:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-10 14:45:38 (GMT) |
commit | 1247e2cda514d7a73187e0b53ec8c35d87a34a84 (patch) | |
tree | 97ee4cbf3a21666ea8ab80eb77365e73bc8a5b60 /Lib | |
parent | 693790817a93701093ef93333be7abbb0d6d4309 (diff) | |
download | cpython-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-x | Lib/test/regrtest.py | 4 | ||||
-rw-r--r-- | Lib/test/test_tempfile.py | 7 |
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) |