diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-08-28 18:10:18 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-08-28 18:10:18 (GMT) |
commit | 5b9eccb383c21fda80f3e3b5b9d6bb803b7b70bf (patch) | |
tree | 295df6ac0207b200df505497a2c5ab5e043fb9bd /Lib/test/test_importlib | |
parent | fc35ecec29a1390be71966565db8080e81352d80 (diff) | |
download | cpython-5b9eccb383c21fda80f3e3b5b9d6bb803b7b70bf.zip cpython-5b9eccb383c21fda80f3e3b5b9d6bb803b7b70bf.tar.gz cpython-5b9eccb383c21fda80f3e3b5b9d6bb803b7b70bf.tar.bz2 |
Issue #15794: Relax a test case due to the deadlock detection's conservativeness.
Diffstat (limited to 'Lib/test/test_importlib')
-rw-r--r-- | Lib/test/test_importlib/test_locks.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/Lib/test/test_importlib/test_locks.py b/Lib/test/test_importlib/test_locks.py index d36b71e..c373b11 100644 --- a/Lib/test/test_importlib/test_locks.py +++ b/Lib/test/test_importlib/test_locks.py @@ -1,4 +1,5 @@ from importlib import _bootstrap +import sys import time import unittest import weakref @@ -41,6 +42,17 @@ else: @unittest.skipUnless(threading, "threads needed for this test") class DeadlockAvoidanceTests(unittest.TestCase): + def setUp(self): + try: + self.old_switchinterval = sys.getswitchinterval() + sys.setswitchinterval(0.000001) + except AttributeError: + self.old_switchinterval = None + + def tearDown(self): + if self.old_switchinterval is not None: + sys.setswitchinterval(self.old_switchinterval) + def run_deadlock_avoidance_test(self, create_deadlock): NLOCKS = 10 locks = [LockType(str(i)) for i in range(NLOCKS)] @@ -75,10 +87,12 @@ class DeadlockAvoidanceTests(unittest.TestCase): def test_deadlock(self): results = self.run_deadlock_avoidance_test(True) - # One of the threads detected a potential deadlock on its second - # acquire() call. - self.assertEqual(results.count((True, False)), 1) - self.assertEqual(results.count((True, True)), len(results) - 1) + # At least one of the threads detected a potential deadlock on its + # second acquire() call. It may be several of them, because the + # deadlock avoidance mechanism is conservative. + nb_deadlocks = results.count((True, False)) + self.assertGreaterEqual(nb_deadlocks, 1) + self.assertEqual(results.count((True, True)), len(results) - nb_deadlocks) def test_no_deadlock(self): results = self.run_deadlock_avoidance_test(False) |