From 96602ba854ad3a72a45e2bc2f2d6dd7ff6bfcd12 Mon Sep 17 00:00:00 2001 From: Dmitry Safonov Date: Mon, 5 Jun 2017 22:23:58 +0300 Subject: [PATCH] restorer: Report child's death reason correctly E.g, if child was killed by SIGSEGV, this message previously was "exited, status=11", as si_code == CLD_DUMPED == 3 in this case will result in (si_code & CLD_KILLED) == (si_code & 1). Which is misleading as you may try to look for exit() calls with 11 arg. Correct if to compare si_code with CLD_*. Signed-off-by: Dmitry Safonov Signed-off-by: Andrei Vagin --- criu/pie/restorer.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/criu/pie/restorer.c b/criu/pie/restorer.c index 6216e43e7..d43da92a6 100644 --- a/criu/pie/restorer.c +++ b/criu/pie/restorer.c @@ -102,12 +102,18 @@ static void sigchld_handler(int signal, siginfo_t *siginfo, void *data) if (siginfo->si_pid == zombies[i]) return; - if (siginfo->si_code & CLD_EXITED) - r = " exited, status="; - else if (siginfo->si_code & CLD_KILLED) - r = " killed by signal "; + if (siginfo->si_code == CLD_EXITED) + r = "exited, status="; + else if (siginfo->si_code == CLD_KILLED) + r = "killed by signal"; + else if (siginfo->si_code == CLD_DUMPED) + r = "terminated abnormally with"; + else if (siginfo->si_code == CLD_TRAPPED) + r = "trapped with"; + else if (siginfo->si_code == CLD_STOPPED) + r = "stopped with"; else - r = "disappeared with "; + r = "disappeared with"; pr_info("Task %d %s %d\n", siginfo->si_pid, r, siginfo->si_status);