]> granicus.if.org Git - python/commitdiff
Issue #7194: test_thread could try to release an unacquired mutex (and fail).
authorAntoine Pitrou <solipsis@pitrou.net>
Fri, 23 Oct 2009 18:32:15 +0000 (18:32 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Fri, 23 Oct 2009 18:32:15 +0000 (18:32 +0000)
Lib/test/test_thread.py

index ffd5244426ecf50560c42ef6098a389f2e27a195..66ad22f25adb1154bd6234e991be9eff04992469 100644 (file)
@@ -26,6 +26,7 @@ class BasicThreadTest(unittest.TestCase):
         self.done_mutex.acquire()
         self.running_mutex = thread.allocate_lock()
         self.random_mutex = thread.allocate_lock()
+        self.created = 0
         self.running = 0
         self.next_ident = 0
 
@@ -37,6 +38,7 @@ class ThreadRunningTests(BasicThreadTest):
             self.next_ident += 1
             verbose_print("creating task %s" % self.next_ident)
             thread.start_new_thread(self.task, (self.next_ident,))
+            self.created += 1
             self.running += 1
 
     def task(self, ident):
@@ -47,7 +49,7 @@ class ThreadRunningTests(BasicThreadTest):
         verbose_print("task %s done" % ident)
         with self.running_mutex:
             self.running -= 1
-            if self.running == 0:
+            if self.created == NUMTASKS and self.running == 0:
                 self.done_mutex.release()
 
     def test_starting_threads(self):
@@ -89,6 +91,7 @@ class ThreadRunningTests(BasicThreadTest):
             for tss in (262144, 0x100000):
                 verbose_print("trying stack_size = (%d)" % tss)
                 self.next_ident = 0
+                self.created = 0
                 for i in range(NUMTASKS):
                     self.newtask()