You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2012/09/20 13:57:10 UTC
svn commit: r1387987 - in /subversion/trunk: build/run_tests.py
subversion/tests/cmdline/svntest/main.py
Author: stsp
Date: Thu Sep 20 11:57:09 2012
New Revision: 1387987
URL: http://svn.apache.org/viewvc?rev=1387987&view=rev
Log:
As part of the never-ending quest of debugging multi-threaded programs:
* build/run_tests.py
(TestHarness): Make the progress_func used for python tests deal with
being called from multiple threads concurrently by protecting the
counter of dots already printed with a mutex.
* subversion/tests/cmdline/svntest/main.py
(TestSpawningThread): Remove mutex here, shouldn't be needed anymore.
Suggested by: philip
Modified:
subversion/trunk/build/run_tests.py
subversion/trunk/subversion/tests/cmdline/svntest/main.py
Modified: subversion/trunk/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/run_tests.py?rev=1387987&r1=1387986&r2=1387987&view=diff
==============================================================================
--- subversion/trunk/build/run_tests.py (original)
+++ subversion/trunk/build/run_tests.py Thu Sep 20 11:57:09 2012
@@ -45,7 +45,7 @@ separated list of test numbers; the defa
# A few useful constants
SVN_VER_MINOR = 8
-import os, re, subprocess, sys, imp
+import os, re, subprocess, sys, imp, threading
from datetime import datetime
import getopt
@@ -490,17 +490,23 @@ class TestHarness:
os.dup2(self.log.fileno(), sys.stdout.fileno())
os.dup2(self.log.fileno(), sys.stderr.fileno())
- # This has to be class-scoped for use in the progress_func()
+ # These have to be class-scoped for use in the progress_func()
self.dots_written = 0
+ self.progress_lock = threading.Lock()
def progress_func(completed, total):
- if not self.log or self.dots_written >= dot_count:
+ """Report test suite progress. Can be called from multiple threads
+ in parallel mode."""
+ if not self.log:
return
dots = (completed * dot_count) / total
if dots > dot_count:
dots = dot_count
- dots_to_write = dots - self.dots_written
- os.write(old_stdout, '.' * dots_to_write)
- self.dots_written = dots
+ self.progress_lock.acquire()
+ if self.dots_written < dot_count:
+ dots_to_write = dots - self.dots_written
+ self.dots_written = dots
+ os.write(old_stdout, '.' * dots_to_write)
+ self.progress_lock.release()
serial_only = hasattr(prog_mod, 'serial_only') and prog_mod.serial_only
Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1387987&r1=1387986&r2=1387987&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Thu Sep 20 11:57:09 2012
@@ -1232,7 +1232,6 @@ class TestSpawningThread(threading.Threa
def __init__(self, queue, progress_func, tests_total):
threading.Thread.__init__(self)
self.queue = queue
- self.lock = threading.Lock()
self.results = []
self.progress_func = progress_func
self.tests_total = tests_total
@@ -1240,21 +1239,16 @@ class TestSpawningThread(threading.Threa
def run(self):
while True:
try:
- self.lock.acquire()
next_index = self.queue.get_nowait()
except queue.Empty:
return
- finally:
- self.lock.release()
self.run_one(next_index)
# signal progress
if self.progress_func:
- self.lock.acquire()
self.progress_func(self.tests_total - self.queue.qsize(),
self.tests_total)
- self.lock.release()
def run_one(self, index):
command = os.path.abspath(sys.argv[0])