From 35ce42f20d17db5ec2ebe535e6f966895e407eb0 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 13 Oct 2010 23:50:54 +0000 Subject: [PATCH] Merged revisions 85444 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r85444 | antoine.pitrou | 2010-10-14 01:48:39 +0200 (jeu., 14 oct. 2010) | 6 lines Fix (hopefully) occasional failures in test_threaded_import. `done` could be released multiple times because of concurrent execution. We convert it to an Event, where calling set() multiple times is not a problem. ........ --- Lib/test/test_threaded_import.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_threaded_import.py index 8884fa8182..7791935fdf 100644 --- a/Lib/test/test_threaded_import.py +++ b/Lib/test/test_threaded_import.py @@ -33,7 +33,7 @@ def task(N, done, done_tasks, errors): done_tasks.append(thread.get_ident()) finished = len(done_tasks) == N if finished: - done.release() + done.set() # Create a circular import structure: A -> C -> B -> D -> A # NOTE: `time` is already loaded and therefore doesn't threaten to deadlock. @@ -99,8 +99,7 @@ class ThreadedImportTests(unittest.TestCase): # This triggers on, e.g., from test import autotest. raise unittest.SkipTest("can't run when import lock is held") - done = thread.allocate_lock() - done.acquire() + done = threading.Event() for N in (20, 50) * 3: if verbose: print("Trying", N, "threads ...", end=' ') @@ -112,13 +111,13 @@ class ThreadedImportTests(unittest.TestCase): pass errors = [] done_tasks = [] + done.clear() for i in range(N): thread.start_new_thread(task, (N, done, done_tasks, errors,)) - done.acquire() + done.wait(60) self.assertFalse(errors) if verbose: print("OK.") - done.release() def test_parallel_module_init(self): self.check_parallel_module_init() -- 2.40.0