diff options
-rw-r--r-- | Lib/test/fork_wait.py | 9 | ||||
-rw-r--r-- | Lib/test/test_fork1.py | 10 | ||||
-rw-r--r-- | Lib/test/test_wait3.py | 9 | ||||
-rw-r--r-- | Lib/test/test_wait4.py | 9 |
4 files changed, 32 insertions, 5 deletions
diff --git a/Lib/test/fork_wait.py b/Lib/test/fork_wait.py index 5600bdb..7eb55f6 100644 --- a/Lib/test/fork_wait.py +++ b/Lib/test/fork_wait.py @@ -34,7 +34,14 @@ class ForkWait(unittest.TestCase): pass def wait_impl(self, cpid): - spid, status = os.waitpid(cpid, 0) + for i in range(10): + # waitpid() shouldn't hang, but some of the buildbots seem to hang + # in the forking tests. This is an attempt to fix the problem. + spid, status = os.waitpid(cpid, os.WNOHANG) + if spid == cpid: + break + time.sleep(2 * SHORTSLEEP) + self.assertEquals(spid, cpid) self.assertEquals(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) diff --git a/Lib/test/test_fork1.py b/Lib/test/test_fork1.py index e909844..e64e398 100644 --- a/Lib/test/test_fork1.py +++ b/Lib/test/test_fork1.py @@ -2,6 +2,7 @@ """ import os +import time from test.fork_wait import ForkWait from test.test_support import TestSkipped, run_unittest, reap_children @@ -12,7 +13,14 @@ except AttributeError: class ForkTest(ForkWait): def wait_impl(self, cpid): - spid, status = os.waitpid(cpid, 0) + for i in range(10): + # waitpid() shouldn't hang, but some of the buildbots seem to hang + # in the forking tests. This is an attempt to fix the problem. + spid, status = os.waitpid(cpid, os.WNOHANG) + if spid == cpid: + break + time.sleep(1.0) + self.assertEqual(spid, cpid) self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) diff --git a/Lib/test/test_wait3.py b/Lib/test/test_wait3.py index 8279973..9de64b2 100644 --- a/Lib/test/test_wait3.py +++ b/Lib/test/test_wait3.py @@ -2,6 +2,7 @@ """ import os +import time from test.fork_wait import ForkWait from test.test_support import TestSkipped, run_unittest, reap_children @@ -17,10 +18,14 @@ except AttributeError: class Wait3Test(ForkWait): def wait_impl(self, cpid): - while 1: - spid, status, rusage = os.wait3(0) + for i in range(10): + # wait3() shouldn't hang, but some of the buildbots seem to hang + # in the forking tests. This is an attempt to fix the problem. + spid, status, rusage = os.wait3(os.WNOHANG) if spid == cpid: break + time.sleep(1.0) + self.assertEqual(spid, cpid) self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) self.assertTrue(rusage) diff --git a/Lib/test/test_wait4.py b/Lib/test/test_wait4.py index 711fd2d..9f7fc14 100644 --- a/Lib/test/test_wait4.py +++ b/Lib/test/test_wait4.py @@ -2,6 +2,7 @@ """ import os +import time from test.fork_wait import ForkWait from test.test_support import TestSkipped, run_unittest, reap_children @@ -17,7 +18,13 @@ except AttributeError: class Wait4Test(ForkWait): def wait_impl(self, cpid): - spid, status, rusage = os.wait4(cpid, 0) + for i in range(10): + # wait4() shouldn't hang, but some of the buildbots seem to hang + # in the forking tests. This is an attempt to fix the problem. + spid, status, rusage = os.wait4(cpid, os.WNOHANG) + if spid == cpid: + break + time.sleep(1.0) self.assertEqual(spid, cpid) self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) self.assertTrue(rusage) |