From: Peter Senna Tschudin <peter.senna@linux.intel.com>
To: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>
Cc: Petri Latvala <adrinael@adrinael.net>,
Kamil Konieczny <kamil.konieczny@linux.intel.com>
Subject: [PATCH i-g-t v2] runner/executor: Detect when child process is killed by a signal
Date: Thu, 29 Aug 2024 14:13:21 +0200 [thread overview]
Message-ID: <c61aa457-b2b3-45a5-90ed-a8d0af4f700d@linux.intel.com> (raw)
In-Reply-To: <f7319a46-d6d4-4ea5-9863-99ccd7cea3a5@linux.intel.com>
Make igt-runner aware about tests being killed by signals. Before this
patch, manually killing a test process would result in igt-runner silently
marking the test as incomplete.
Now igt-runner aborts the run verbosely. As an example the following was
extracted from results.json:
This test caused an abort condition: Test terminated by a signal -9
v2: fix race condition
Cc: Petri Latvala <adrinael@adrinael.net>
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Signed-off-by: Peter Senna Tschudin <peter.senna@intel.com>
---
runner/executor.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/runner/executor.c b/runner/executor.c
index ac73e1dde..5f653b0d4 100644
--- a/runner/executor.c
+++ b/runner/executor.c
@@ -888,6 +888,7 @@ static int monitor_output(pid_t child,
const int interval_length = 1;
int wd_timeout;
int killed = 0; /* 0 if not killed, signal number otherwise */
+ bool child_reaped = false;
struct timespec time_beg, time_now, time_last_activity, time_last_subtest, time_killed;
unsigned long taints = 0;
bool aborting = false;
@@ -960,6 +961,24 @@ static int monitor_output(pid_t child,
igt_gettime(&time_now);
+ if (child == waitpid(child, &status, WNOHANG))
+ child_reaped = true;
+
+ if (child_reaped) {
+ if(WIFSIGNALED(status)) {
+ /* The test terminated by a signal */
+
+ aborting = true;
+ killed = -WTERMSIG(status);
+
+ sprintf(buf, "Test terminated by a signal %d\n", killed);
+ errf("%s", buf);
+ *abortreason = strdup(buf);
+
+ break;
+ }
+ }
+
/* TODO: Refactor these handlers to their own functions */
if (outfd >= 0 && FD_ISSET(outfd, &set)) {
char *newline;
@@ -1241,7 +1260,11 @@ static int monitor_output(pid_t child,
errf("Error reading from signalfd: %m\n");
continue;
} else if (siginfo.ssi_signo == SIGCHLD) {
- if (child != waitpid(child, &status, WNOHANG)) {
+ if (!child_reaped) {
+ if (child == waitpid(child, &status, WNOHANG))
+ child_reaped = true;
+ }
+ if (!child_reaped) {
errf("Failed to reap child\n");
status = 9999;
} else if (WIFEXITED(status)) {
--
2.34.1
next prev parent reply other threads:[~2024-08-29 12:13 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-28 6:40 [PATCH i-g-t] runner/executor.c: Detect tests killed by a signal Peter Senna Tschudin
2024-08-28 8:37 ` ✗ GitLab.Pipeline: warning for " Patchwork
2024-08-28 8:40 ` ✓ CI.xeBAT: success " Patchwork
2024-08-28 8:52 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-08-28 13:15 ` ✗ CI.xeFULL: " Patchwork
2024-08-29 12:13 ` Peter Senna Tschudin [this message]
2024-08-29 17:37 ` ✗ CI.xeBAT: failure for runner/executor.c: Detect tests killed by a signal (rev2) Patchwork
2024-08-30 4:28 ` Peter Senna Tschudin
2024-08-29 17:49 ` ✓ Fi.CI.BAT: success " Patchwork
2024-08-30 6:34 ` ✗ CI.xeFULL: failure " Patchwork
2024-08-30 12:39 ` [PATCH i-g-t v3] runner/executor: Detect when child process is killed by a signal Peter Senna Tschudin
2024-08-30 16:19 ` ✓ CI.xeBAT: success for runner/executor.c: Detect tests killed by a signal (rev3) Patchwork
2024-08-30 16:31 ` ✓ Fi.CI.BAT: " Patchwork
2024-08-31 0:57 ` ✗ Fi.CI.IGT: failure for runner/executor.c: Detect tests killed by a signal (rev2) Patchwork
2024-08-31 4:32 ` ✓ CI.xeFULL: success for runner/executor.c: Detect tests killed by a signal (rev3) Patchwork
2024-09-01 3:32 ` ✓ Fi.CI.IGT: " Patchwork
2024-09-03 6:19 ` [PATCH i-g-t v4] runner/executor: Detect when child process is killed by a signal Peter Senna Tschudin
2024-09-03 11:44 ` ✗ Fi.CI.BUILD: failure for runner/executor.c: Detect tests killed by a signal (rev4) Patchwork
2024-09-03 12:05 ` [PATCH i-g-t v5] runner/executor: Detect when child process is killed by a signal Peter Senna Tschudin
2024-09-10 15:58 ` Kamil Konieczny
2024-09-11 7:06 ` Peter Senna Tschudin
2024-09-11 10:50 ` Kamil Konieczny
2024-09-03 12:36 ` ✓ CI.xeBAT: success for runner/executor.c: Detect tests killed by a signal (rev5) Patchwork
2024-09-03 13:04 ` ✓ Fi.CI.BAT: " Patchwork
2024-09-03 14:46 ` ✗ CI.xeFULL: failure " Patchwork
2024-09-03 14:56 ` Peter Senna Tschudin
2024-09-04 14:34 ` ✓ Fi.CI.IGT: success " Patchwork
2024-09-05 10:44 ` ✗ GitLab.Pipeline: warning for runner/executor.c: Detect tests killed by a signal (rev4) Patchwork
2024-10-03 13:27 ` [PATCH i-g-t v6] runner/executor: Abort when child process is killed by a signal Peter Senna Tschudin
2024-10-09 14:46 ` Kamil Konieczny
2024-10-09 16:36 ` Kamil Konieczny
2024-10-11 15:18 ` Kamil Konieczny
2024-10-03 16:17 ` ✓ CI.xeBAT: success for runner/executor.c: Detect tests killed by a signal (rev6) Patchwork
2024-10-03 16:29 ` ✓ Fi.CI.BAT: " Patchwork
2024-10-03 18:00 ` ✗ CI.xeFULL: failure " Patchwork
2024-10-04 5:30 ` Peter Senna Tschudin
2024-10-04 10:34 ` ✗ GitLab.Pipeline: warning " Patchwork
2024-10-08 3:28 ` ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c61aa457-b2b3-45a5-90ed-a8d0af4f700d@linux.intel.com \
--to=peter.senna@linux.intel.com \
--cc=adrinael@adrinael.net \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.