Exit status more cleanly

This commit is contained in:
Radon Rosborough 2021-08-14 13:48:42 -07:00
parent db7b34cd4c
commit 2a591072fe
1 changed files with 10 additions and 20 deletions

View File

@ -122,16 +122,6 @@ void wait_alarm(int signum)
die(timeout_msg); die(timeout_msg);
} }
void wait_alarm_group(int signum)
{
(void)signum;
if (signal(SIGTERM, SIG_IGN) == SIG_ERR)
die("signal failed");
if (kill(0, SIGTERM) < 0)
die("kill failed");
die(timeout_msg);
}
void session(char *uuid, char *lang, char *imageHash) void session(char *uuid, char *lang, char *imageHash)
{ {
if (setvbuf(stdout, NULL, _IONBF, 0) != 0) if (setvbuf(stdout, NULL, _IONBF, 0) != 0)
@ -323,23 +313,23 @@ void exec(char *uuid, int argc, char **cmdline, bool pty)
struct timespec ts_10ms; struct timespec ts_10ms;
ts_10ms.tv_sec = 0; ts_10ms.tv_sec = 0;
ts_10ms.tv_nsec = 1000 * 1000 * 10; ts_10ms.tv_nsec = 1000 * 1000 * 10;
pid_t pid = fork(); pid_t input_pid = fork(), output_pid;
if (pid < 0) if (input_pid < 0)
die("fork failed"); die("fork failed");
else if (pid == 0) { else if (input_pid == 0) {
dataFIFO = inputFIFO; dataFIFO = inputFIFO;
} else { } else {
pid = fork(); output_pid = fork();
if (pid < 0) if (output_pid < 0)
die("fork failed"); die("fork failed");
else if (pid == 0) { else if (output_pid == 0) {
dataFIFO = outputFIFO; dataFIFO = outputFIFO;
} else { } else {
dataFIFO = statusFIFO; dataFIFO = statusFIFO;
} }
} }
if (dataFIFO != statusFIFO) { if (dataFIFO != statusFIFO) {
if (signal(SIGALRM, wait_alarm_group) == SIG_ERR) if (signal(SIGALRM, wait_alarm) == SIG_ERR)
die("signal failed"); die("signal failed");
alarm(1); alarm(1);
} }
@ -402,9 +392,9 @@ void exec(char *uuid, int argc, char **cmdline, bool pty)
long status = strtol(line, &endptr, 10); long status = strtol(line, &endptr, 10);
if (*endptr != '\n') if (*endptr != '\n')
die("strtol failed"); die("strtol failed");
if (signal(SIGTERM, SIG_IGN) == SIG_ERR) if (kill(input_pid, SIGTERM) < 0)
die("signal failed"); die("kill failed");
if (kill(0, SIGTERM) < 0) if (kill(output_pid, SIGTERM) < 0)
die("kill failed"); die("kill failed");
exit(status); exit(status);
} }