summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-08-09 15:59:05 (GMT)
committerGitHub <noreply@github.com>2017-08-09 15:59:05 (GMT)
commitda5e9301877346942fa4279612750d6a09e05153 (patch)
treedf7134d70a089bb3271334581b118ac0b006f3c4
parente3510d74aacc477c30f42f2b941d69689bbc478e (diff)
downloadcpython-da5e9301877346942fa4279612750d6a09e05153.zip
cpython-da5e9301877346942fa4279612750d6a09e05153.tar.gz
cpython-da5e9301877346942fa4279612750d6a09e05153.tar.bz2
bpo-31160: Fix test_random for zombie process (#3045)
TestModule.test_after_fork() now calls os.waitpid() to read the exit status of the child process to avoid creating a zombie process.
-rw-r--r--Lib/test/test_random.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index f657b46..fbb1cf6 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -907,7 +907,9 @@ class TestModule(unittest.TestCase):
def test_after_fork(self):
# Test the global Random instance gets reseeded in child
r, w = os.pipe()
- if os.fork() == 0:
+ pid = os.fork()
+ if pid == 0:
+ # child process
try:
val = random.getrandbits(128)
with open(w, "w") as f:
@@ -915,12 +917,16 @@ class TestModule(unittest.TestCase):
finally:
os._exit(0)
else:
+ # parent process
os.close(w)
val = random.getrandbits(128)
with open(r, "r") as f:
child_val = eval(f.read())
self.assertNotEqual(val, child_val)
+ pid, status = os.waitpid(pid, 0)
+ self.assertEqual(status, 0)
+
if __name__ == "__main__":
unittest.main()