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)
{
int serrno = errno;
switch (signo) {
case SIGCHLD: {
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;
default: break;
}
errno = serrno;
}
void signal_exit(int status)

View File

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