# HG changeset patch # User Brendan Cully # Date 1374090312 25200 # Node ID 3dc7d29a42e9e4fcb6ff7c3212792807f8f87481 # Parent 952364b69450ff29e022d828f16457508658487d run-tests: lock popen wait/poll In python2.4, any call to Popen() may attempt to wait on any active process, and wait is not thread-safe. Make it thread-safe. See http://bugs.python.org/issue1731717 for details. [ original upstream message ] diff -r 952364b69450 -r 3dc7d29a42e9 tests/run-tests.py --- a/tests/run-tests.py Tue Jul 16 12:44:11 2013 -0500 +++ b/tests/run-tests.py Wed Jul 17 12:45:12 2013 -0700 @@ -59,6 +59,15 @@ import Queue as queue processlock = threading.Lock() +waitlock = threading.Lock() + +def waitlocked(fn): + def run(): + waitlock.acquire() + ret = fn() + waitlock.release() + return ret + return run closefds = os.name == 'posix' def Popen4(cmd, wd, timeout, env=None): @@ -67,6 +76,8 @@ close_fds=closefds, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait = waitlocked(p.wait) + p.poll = waitlocked(p.poll) processlock.release() p.fromchild = p.stdout @@ -838,11 +849,7 @@ cleanup() raise - try: - ret = proc.wait() - except OSError: - # Py2.4 seems to have a race here - pass + ret = proc.wait() if wifexited(ret): ret = os.WEXITSTATUS(ret)