Preserve errno across signals.

This commit is contained in:
Nicholas J. Kain 2022-02-24 05:06:12 -05:00
parent a9874d4959
commit 286b86d62c
2 changed files with 7 additions and 6 deletions

2
ndhc.c
View File

@ -149,6 +149,7 @@ void show_usage(void)
static void signal_handler(int signo) static void signal_handler(int signo)
{ {
int serrno = errno;
switch (signo) { switch (signo) {
case SIGCHLD: { case SIGCHLD: {
static const char errstr[] = "ndhc-master: Subprocess terminated unexpectedly. Exiting.\n"; static const char errstr[] = "ndhc-master: Subprocess terminated unexpectedly. Exiting.\n";
@ -161,6 +162,7 @@ static void signal_handler(int signo)
case SIGUSR2: l_signal_release = 1; break; case SIGUSR2: l_signal_release = 1; break;
default: break; default: break;
} }
errno = serrno;
} }
void signal_exit(int status) void signal_exit(int status)

View File

@ -123,14 +123,13 @@ static void do_scriptd_work(void)
static void signal_handler(int signo) static void signal_handler(int signo)
{ {
switch (signo) { int serrno = errno;
case SIGCHLD: if (signo == SIGCHLD) {
while (waitpid(-1, NULL, WNOHANG) > 0); while (waitpid(-1, NULL, WNOHANG) > 0);
break; } else if (signo == SIGINT || signo == SIGTERM) {
case SIGINT: _exit(EXIT_FAILURE);
case SIGTERM: _exit(EXIT_FAILURE); break;
default: break;
} }
errno = serrno;
} }
static void setup_signals_scriptd(void) static void setup_signals_scriptd(void)