diff --git a/tools/test.py b/tools/test.py index 563555ed95a59f..3414425a106385 100755 --- a/tools/test.py +++ b/tools/test.py @@ -71,8 +71,8 @@ def __init__(self, cases, flaky_tests_mode): 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 @@ def Run(self, tasks): 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 @@ def RunSingle(self, parallel, thread_id): 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():