diff options
Diffstat (limited to 'Lib/test/test_wait3.py')
-rw-r--r-- | Lib/test/test_wait3.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/test_wait3.py b/Lib/test/test_wait3.py index eb51b2c..3825451 100644 --- a/Lib/test/test_wait3.py +++ b/Lib/test/test_wait3.py @@ -2,6 +2,8 @@ """ import os +import subprocess +import sys import time import unittest from test.fork_wait import ForkWait @@ -31,6 +33,22 @@ class Wait3Test(ForkWait): self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) self.assertTrue(rusage) + def test_wait3_rusage_initialized(self): + # Ensure a successful wait3() call where no child was ready to report + # its exit status does not return uninitialized memory in the rusage + # structure. See bpo-36279. + args = [sys.executable, '-c', 'import sys; sys.stdin.read()'] + proc = subprocess.Popen(args, stdin=subprocess.PIPE) + try: + pid, status, rusage = os.wait3(os.WNOHANG) + self.assertEqual(0, pid) + self.assertEqual(0, status) + self.assertEqual(0, sum(rusage)) + finally: + proc.stdin.close() + proc.wait() + + def tearDownModule(): reap_children() |