Commit da5e9301 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

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.
parent e3510d74
...@@ -907,7 +907,9 @@ class TestModule(unittest.TestCase): ...@@ -907,7 +907,9 @@ class TestModule(unittest.TestCase):
def test_after_fork(self): def test_after_fork(self):
# Test the global Random instance gets reseeded in child # Test the global Random instance gets reseeded in child
r, w = os.pipe() r, w = os.pipe()
if os.fork() == 0: pid = os.fork()
if pid == 0:
# child process
try: try:
val = random.getrandbits(128) val = random.getrandbits(128)
with open(w, "w") as f: with open(w, "w") as f:
...@@ -915,12 +917,16 @@ class TestModule(unittest.TestCase): ...@@ -915,12 +917,16 @@ class TestModule(unittest.TestCase):
finally: finally:
os._exit(0) os._exit(0)
else: else:
# parent process
os.close(w) os.close(w)
val = random.getrandbits(128) val = random.getrandbits(128)
with open(r, "r") as f: with open(r, "r") as f:
child_val = eval(f.read()) child_val = eval(f.read())
self.assertNotEqual(val, child_val) self.assertNotEqual(val, child_val)
pid, status = os.waitpid(pid, 0)
self.assertEqual(status, 0)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment