From f0f0122e9f20e85597451730fb05691f3481eb38 Mon Sep 17 00:00:00 2001 From: Petri Latvala Date: Thu, 18 Jun 2020 15:06:22 +0300 Subject: runner: Inject a message when killing test to taints Normally runner injecting a message to the test's stdout/stderr logs has a race condition; The test outputs have special lines (subtest starting/ending) and accidentally injecting stuff in between would cause funky results. When we're killing a test because the kernel got tainted, we know already that we're not getting a subtest ending line and we can inject, if we make sure we have newlines printed before and after the injection. Having a message in the stdout of the test will aid automatic bug filtering. Signed-off-by: Petri Latvala Cc: Arkadiusz Hiler Reviewed-by: Arkadiusz Hiler --- runner/executor.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'runner') diff --git a/runner/executor.c b/runner/executor.c index 06390262..7bb2b14c 100644 --- a/runner/executor.c +++ b/runner/executor.c @@ -1049,9 +1049,27 @@ static int monitor_output(pid_t child, * the result an incomplete we avoid * journaling a timeout here. */ - if (is_tainted(taints)) + if (is_tainted(taints)) { exitline = EXECUTOR_EXIT; + /* + * Also inject a message to + * the test's stdout. As we're + * shooting for an incomplete + * anyway, we don't need to + * care if we're not between + * full lines from stdout. We + * do need to make sure we + * have newlines on both ends + * of this injection though. + */ + dprintf(outputs[_F_OUT], + "\nrunner: This test was killed due to a kernel taint (0x%lx).\n", + taints); + if (settings->sync) + fdatasync(outputs[_F_OUT]); + } + dprintf(outputs[_F_JOURNAL], "%s%d (%.3fs)\n", exitline, status, time); -- cgit v1.2.3