]> granicus.if.org Git - python/commitdiff
Restore rev 47014:
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 7 Jul 2006 06:03:15 +0000 (06:03 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 7 Jul 2006 06:03:15 +0000 (06:03 +0000)
The hppa ubuntu box sometimes hangs forever in these tests.  My guess
is that the wait is failing for some reason.  Use WNOHANG, so we won't
wait until the buildbot kills the test suite.

I haven't been able to reproduce the failure, so I'm not sure if
this will help or not.  Hopefully, this change will cause the test
to fail, rather than hang.  That will be better since we will get
the rest of the test results.  It may also help us debug the real problem.

*** The reason this originally failed was because there were many
zombie children outstanding before rev 47158 cleaned them up.
There are still hangs in test_subprocess that need to be addressed,
but that will take more work.  This should close some holes.

Lib/test/fork_wait.py
Lib/test/test_fork1.py
Lib/test/test_wait3.py
Lib/test/test_wait4.py

index 5600bdbc512798170e5856be8bdc005a2b820cf0..7eb55f66831d150b8289c0af50dc418688b272f4 100644 (file)
@@ -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))
 
index e909844e912b89cd1979c5faaead08a1e4091929..e64e3989999db11ff170688a9cac621cdd012747 100644 (file)
@@ -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))
 
index 82799732fe5e040692161a9555040f912e103cf8..9de64b21ea328eb34c1daf754c3dac0b27f852ab 100644 (file)
@@ -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)
index 711fd2dc3895904dcc07a13d03a998a5f54b7d7f..9f7fc14a64af3cb95315874ea58d2499dde3b23a 100644 (file)
@@ -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)