diff options
author | Ben Byer <bbyer@bbyer.apple.com> | 2007-09-21 17:07:36 -0700 |
---|---|---|
committer | Ben Byer <bbyer@bbyer.apple.com> | 2007-09-21 17:07:36 -0700 |
commit | abe0a51f3f790f8c055289465e130177c4b647cc (patch) | |
tree | 3fb3677ab4be27e708b12654c618a1ce979ea585 /os | |
parent | eb82b19aa71333b46e927516cc228f25d3e05e4d (diff) |
So, like, checking return codes of system calls (signal, etc) is good.
Also, only restore an old signal handler if one was actually set
(prevents the server from dying on OS X).
Diffstat (limited to 'os')
-rw-r--r-- | os/utils.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/os/utils.c b/os/utils.c index 144098b37..36c8dfeb3 100644 --- a/os/utils.c +++ b/os/utils.c @@ -285,7 +285,8 @@ OsSignal(sig, handler) sigaddset(&act.sa_mask, sig); act.sa_flags = 0; act.sa_handler = handler; - sigaction(sig, &act, &oact); + if (sigaction(sig, &act, &oact)) + perror("sigaction"); return oact.sa_handler; #endif } @@ -1684,6 +1685,10 @@ System(char *command) #ifdef SIGCHLD csig = signal(SIGCHLD, SIG_DFL); + if (csig == SIG_ERR) { + perror("signal"); + return -1; + } #endif #ifdef DEBUG @@ -1708,7 +1713,10 @@ System(char *command) } #ifdef SIGCHLD - signal(SIGCHLD, csig); + if (signal(SIGCHLD, csig) == SIG_ERR) { + perror("signal"); + return -1; + } #endif return p == -1 ? -1 : status; @@ -1745,13 +1753,18 @@ Popen(char *command, char *type) /* Ignore the smart scheduler while this is going on */ old_alarm = signal(SIGALRM, SIG_IGN); + if (old_alarm == SIG_ERR) { + perror("signal"); + return NULL; + } switch (pid = fork()) { case -1: /* error */ close(pdes[0]); close(pdes[1]); xfree(cur); - signal(SIGALRM, old_alarm); + if (signal(SIGALRM, old_alarm) == SIG_ERR) + perror("signal"); return NULL; case 0: /* child */ if (setgid(getgid()) == -1) @@ -1927,7 +1940,10 @@ Pclose(pointer iop) /* allow EINTR again */ OsReleaseSignals (); - signal(SIGALRM, old_alarm); + if (old_alarm && signal(SIGALRM, old_alarm) == SIG_ERR) { + perror("signal"); + return -1; + } return pid == -1 ? -1 : pstat; } |