Handle signal handler setup error properly in head process

This commit is contained in:
madmaurice 2021-01-15 20:22:22 +01:00
parent d0feff88b1
commit dfbf2767f2

9
main.c
View file

@ -83,7 +83,14 @@ int main(int argc, char* const* argv)
pid_child = pid; pid_child = pid;
if (sigaction(SIGTERM, &forward_signal_descriptor, NULL) == -1) if (sigaction(SIGTERM, &forward_signal_descriptor, NULL) == -1)
{ {
printf("Unable to setup signal handler in head\n"); int err = errno;
// Have to kill child here, otherwise that gets orphaned and runs anyway.
// Use SIGKILL here because it might forward SIGTERM to its child and that
// decides not to stop.
kill(pid_child, SIGKILL);
// Restore errno as it might've been overwritten by kill
errno = err;
err(errno, "Unable to set up signal handler in head process");
} }
// parent waits for child then exits // parent waits for child then exits
// Could be interrupt due to a signal. Retry in that case. // Could be interrupt due to a signal. Retry in that case.