Fixed a signal-handling bug that could cause whatnow to sometimes exit
authorDan Harkless <dan@harkless.org>
Thu, 13 May 1999 01:25:52 +0000 (01:25 +0000)
committerDan Harkless <dan@harkless.org>
Thu, 13 May 1999 01:25:52 +0000 (01:25 +0000)
without prompting the user. Based on a patch by Richard Geiger
<rmg@netapp.com>.

sbr/pidwait.c

index 4bd02e3..0bbe588 100644 (file)
@@ -18,6 +18,7 @@ pidwait (pid_t id, int sigsok)
 {
     pid_t pid;
     sigset_t set, oset;
+    SIGNAL_HANDLER istat, qstat;
 
 #ifdef WAITINT
     int status;
@@ -26,11 +27,9 @@ pidwait (pid_t id, int sigsok)
 #endif
 
     if (sigsok == -1) {
-       /* block a couple of signals */
-       sigemptyset (&set);
-       sigaddset (&set, SIGINT);
-       sigaddset (&set, SIGQUIT);
-       SIGPROCMASK (SIG_BLOCK, &set, &oset);
+       /* ignore a couple of signals */
+       istat = SIGNAL (SIGINT, SIG_IGN);
+       qstat = SIGNAL (SIGQUIT, SIG_IGN);
     }
 
 #ifdef HAVE_WAITPID
@@ -41,8 +40,9 @@ pidwait (pid_t id, int sigsok)
 #endif
 
     if (sigsok == -1) {
-       /* reset the signal mask */
-       SIGPROCMASK (SIG_SETMASK, &oset, &set);
+       /* reset the signal handlers */
+       SIGNAL (SIGINT, istat);
+       SIGNAL (SIGQUIT, qstat);
     }
 
 #ifdef WAITINT