summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-05-09 19:17:02 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-05-09 19:17:02 (GMT)
commit606c3f548683a2fc8b7e53aeaafc279bb584eebf (patch)
treef9719378448a152ae4945fdbce23e576f79797dd
parent5aa878c61a7ecf043ac390672b997adbe7e340d0 (diff)
downloadcpython-606c3f548683a2fc8b7e53aeaafc279bb584eebf.zip
cpython-606c3f548683a2fc8b7e53aeaafc279bb584eebf.tar.gz
cpython-606c3f548683a2fc8b7e53aeaafc279bb584eebf.tar.bz2
Issue #12041: Make test_wait3 more robust.
-rw-r--r--Lib/test/fork_wait.py10
-rw-r--r--Lib/test/test_wait3.py7
-rw-r--r--Misc/NEWS2
3 files changed, 13 insertions, 6 deletions
diff --git a/Lib/test/fork_wait.py b/Lib/test/fork_wait.py
index 1caab1c..88527df 100644
--- a/Lib/test/fork_wait.py
+++ b/Lib/test/fork_wait.py
@@ -43,6 +43,7 @@ class ForkWait(unittest.TestCase):
self.assertEqual(spid, cpid)
self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
+ @support.reap_threads
def test_wait(self):
for i in range(NUM_THREADS):
_thread.start_new(self.f, (i,))
@@ -69,7 +70,8 @@ class ForkWait(unittest.TestCase):
os._exit(n)
else:
# Parent
- self.wait_impl(cpid)
- # Tell threads to die
- self.stop = 1
- time.sleep(2*SHORTSLEEP) # Wait for threads to die
+ try:
+ self.wait_impl(cpid)
+ finally:
+ # Tell threads to die
+ self.stop = 1
diff --git a/Lib/test/test_wait3.py b/Lib/test/test_wait3.py
index 786e60b..bd06c8d 100644
--- a/Lib/test/test_wait3.py
+++ b/Lib/test/test_wait3.py
@@ -19,13 +19,16 @@ except AttributeError:
class Wait3Test(ForkWait):
def wait_impl(self, cpid):
- for i in range(10):
+ # This many iterations can be required, since some previously run
+ # tests (e.g. test_ctypes) could have spawned a lot of children
+ # very quickly.
+ for i in range(30):
# 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)
+ time.sleep(0.1)
self.assertEqual(spid, cpid)
self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
diff --git a/Misc/NEWS b/Misc/NEWS
index 1c5ce69..97d6e0d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -619,6 +619,8 @@ Extension Modules
Tests
-----
+- Issue #12041: Make test_wait3 more robust.
+
- Issue #11873: Change regex in test_compileall to fix occasional failures when
when the randomly generated temporary path happened to match the regex.