]> granicus.if.org Git - python/commitdiff
Merged revisions 85444 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Wed, 13 Oct 2010 23:50:54 +0000 (23:50 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Wed, 13 Oct 2010 23:50:54 +0000 (23:50 +0000)
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

index 8884fa8182faaf4069a8734ede3b013379511b59..7791935fdf170d2d0963bc87dc2f64b391eae3b9 100644 (file)
@@ -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()