summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-10-13 23:48:39 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-10-13 23:48:39 (GMT)
commita62cbf7cce9ac3e105f587c73b41f7b70d91bb3c (patch)
tree40513e8eb023f2f2f9f703aee82df4c9de7cbf11
parentd24fc5d7c4baed7b0abcf49f06e3030ca61692f7 (diff)
downloadcpython-a62cbf7cce9ac3e105f587c73b41f7b70d91bb3c.zip
cpython-a62cbf7cce9ac3e105f587c73b41f7b70d91bb3c.tar.gz
cpython-a62cbf7cce9ac3e105f587c73b41f7b70d91bb3c.tar.bz2
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.
-rw-r--r--Lib/test/test_threaded_import.py9
1 files changed, 4 insertions, 5 deletions
diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_threaded_import.py
index 8884fa8..7791935 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()