0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00

tools: enable ctrl-c for parallel tests

use a threading.Event instead of a boolean attribute.

PR-URL: https://github.com/iojs/io.js/pull/277
Fixes: https://github.com/iojs/io.js/issues/260
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
Chris Dickinson 2015-01-09 14:15:29 -08:00
parent 4e58211bb7
commit 12912c6b30

View File

@ -71,8 +71,8 @@ class ProgressIndicator(object):
self.total = len(cases)
self.failed = [ ]
self.crashed = 0
self.terminate = False
self.lock = threading.Lock()
self.shutdown_event = threading.Event()
def PrintFailureHeader(self, test):
if test.IsNegative():
@ -101,17 +101,19 @@ class ProgressIndicator(object):
for thread in threads:
# Use a timeout so that signals (ctrl-c) will be processed.
thread.join(timeout=10000000)
except (KeyboardInterrupt, SystemExit), e:
self.shutdown_event.set()
except Exception, e:
# If there's an exception we schedule an interruption for any
# remaining threads.
self.terminate = True
self.shutdown_event.set()
# ...and then reraise the exception to bail out
raise
self.Done()
return not self.failed
def RunSingle(self, parallel, thread_id):
while not self.terminate:
while not self.shutdown_event.is_set():
try:
test = self.parallel_queue.get_nowait()
except Empty:
@ -131,9 +133,8 @@ class ProgressIndicator(object):
output = case.Run()
case.duration = (datetime.now() - start)
except IOError, e:
assert self.terminate
return
if self.terminate:
if self.shutdown_event.is_set():
return
self.lock.acquire()
if output.UnexpectedOutput():