summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/igt_core.c27
-rw-r--r--runner/executor.c8
2 files changed, 25 insertions, 10 deletions
diff --git a/lib/igt_core.c b/lib/igt_core.c
index e0989f53..64883d64 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1852,14 +1852,29 @@ static struct {
static igt_exit_handler_t exit_handler_fn[MAX_EXIT_HANDLERS];
static bool exit_handler_disabled;
+static const struct {
+ int number;
+ const char *name;
+ size_t name_len;
+} handled_signals[] = {
#define SIGDEF(x) { x, #x, sizeof(#x) - 1 }
#define SILENT(x) { x, NULL, 0 }
-static const struct { int number; const char *name; size_t name_len; } handled_signals[] =
- { SILENT(SIGINT), SILENT(SIGHUP), SILENT(SIGTERM), SILENT(SIGQUIT),
- SILENT(SIGPIPE), SIGDEF(SIGABRT), SIGDEF(SIGSEGV), SIGDEF(SIGBUS),
- SIGDEF(SIGFPE) };
+
+ SILENT(SIGINT),
+ SILENT(SIGHUP),
+ SILENT(SIGPIPE),
+ SILENT(SIGTERM),
+
+ SIGDEF(SIGQUIT), /* used by igt_runner for its external timeout */
+
+ SIGDEF(SIGABRT),
+ SIGDEF(SIGSEGV),
+ SIGDEF(SIGBUS),
+ SIGDEF(SIGFPE)
+
#undef SILENT
#undef SIGDEF
+};
static int install_sig_handler(int sig_num, sighandler_t handler)
{
@@ -1940,15 +1955,15 @@ static void fatal_sig_handler(int sig)
__write_stderr(handled_signals[i].name,
handled_signals[i].name_len);
write_stderr(".\n");
+
+ print_backtrace_sig_safe();
}
if (crash_signal(sig)) {
/* Linux standard to return exit code as 128 + signal */
if (!failed_one)
igt_exitcode = 128 + sig;
-
failed_one = true;
- print_backtrace_sig_safe();
if (in_subtest)
exit_subtest("CRASH");
diff --git a/runner/executor.c b/runner/executor.c
index a7d1f5f8..54c530b7 100644
--- a/runner/executor.c
+++ b/runner/executor.c
@@ -510,11 +510,11 @@ static int monitor_output(pid_t child,
switch (killed) {
case 0:
if (settings->log_level >= LOG_LEVEL_NORMAL) {
- printf("Timeout. Killing the current test with SIGTERM.\n");
+ printf("Timeout. Killing the current test with SIGQUIT.\n");
fflush(stdout);
}
- killed = SIGTERM;
+ killed = SIGQUIT;
if (!kill_child(killed, child))
return -1;
@@ -526,7 +526,7 @@ static int monitor_output(pid_t child,
watchdogs_set_timeout(120);
intervals_left = timeout_intervals = 1;
break;
- case SIGTERM:
+ case SIGQUIT:
if (settings->log_level >= LOG_LEVEL_NORMAL) {
printf("Timeout. Killing the current test with SIGKILL.\n");
fflush(stdout);
@@ -706,7 +706,7 @@ static int monitor_output(pid_t child,
aborting = true;
timeout = 2;
- killed = SIGTERM;
+ killed = SIGQUIT;
if (!kill_child(killed, child))
return -1;