summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/dosep.py
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2016-04-18 16:09:21 +0000
committerTodd Fiala <todd.fiala@gmail.com>2016-04-18 16:09:21 +0000
commit430309f13a89cb48bbff0d51768c88e8022b127b (patch)
tree3df947b30419cd12c412b3ec72bfc25ade714c40 /lldb/packages/Python/lldbsuite/test/dosep.py
parentec4f40b6ee8852dd0cb48b3deb621121066d590f (diff)
downloadbcm5719-llvm-430309f13a89cb48bbff0d51768c88e8022b127b.tar.gz
bcm5719-llvm-430309f13a89cb48bbff0d51768c88e8022b127b.zip
fix a race is the LLDB test suite results collection
The race boiled down to this: If a test worker queue is able to run the test inferior and clean up before the dosep.py listener socket is spun up, and the worker queue is the last one (as would be the case when there's only one test rerunning in the rerun queue), then the test suite will exit the main loop before having a chance to process any test events coming from the test inferior or the worker queue job control. I found this race to be far more likely on fast hardware. Our Linux CI is one such example. While it will show up primarily during meta test events generated by a worker thread when a test inferior times out or exits with an exceptional exit (e.g. seg fault), it only requires that the OS takes longer to hook up the listener socket than it takes for the final test inferior and worker thread to shut down. See: http://reviews.llvm.org/D19214 reviewed by: Pavel Labath llvm-svn: 266624
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/dosep.py')
-rw-r--r--lldb/packages/Python/lldbsuite/test/dosep.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/dosep.py b/lldb/packages/Python/lldbsuite/test/dosep.py
index 8ec423c7f6c..69e85bdd9e3 100644
--- a/lldb/packages/Python/lldbsuite/test/dosep.py
+++ b/lldb/packages/Python/lldbsuite/test/dosep.py
@@ -109,13 +109,17 @@ def setup_global_variables(
global GET_WORKER_INDEX
GET_WORKER_INDEX = get_worker_index_use_pid
-def report_test_failure(name, command, output):
+def report_test_failure(name, command, output, timeout):
global output_lock
with output_lock:
if not (RESULTS_FORMATTER and RESULTS_FORMATTER.is_using_terminal()):
print(file=sys.stderr)
print(output, file=sys.stderr)
- print("[%s FAILED]" % name, file=sys.stderr)
+ if timeout:
+ timeout_str = " (TIMEOUT)"
+ else:
+ timeout_str = ""
+ print("[%s FAILED]%s" % (name, timeout_str), file=sys.stderr)
print("Command invoked: %s" % ' '.join(command), file=sys.stderr)
update_progress(name)
@@ -211,7 +215,7 @@ class DoTestProcessDriver(process_control.ProcessDriver):
# only stderr does.
report_test_pass(self.file_name, output[1])
else:
- report_test_failure(self.file_name, command, output[1])
+ report_test_failure(self.file_name, command, output[1], was_timeout)
# Save off the results for the caller.
self.results = (
OpenPOWER on IntegriCloud