]> Zhao Yanbai Git Server - minix.git/commitdiff
Handle SIGSTOP more consistently and according to POSIX rules; it can no longer be...
authorErik van der Kouwe <erik@minix3.org>
Sun, 13 Sep 2009 12:24:23 +0000 (12:24 +0000)
committerErik van der Kouwe <erik@minix3.org>
Sun, 13 Sep 2009 12:24:23 +0000 (12:24 +0000)
man/man2/sigaction.2
servers/pm/signal.c

index c35044b34bb4780df4e48076e52dbadb414d6e0f..9c1fa71fdecbae48fd8331ee30b24c648c419887 100644 (file)
@@ -182,7 +182,9 @@ The process should be stopped, but is killed instead.
 .PP
 The
 .B SIGKILL
-signal cannot be caught or ignored.  The
+and
+.B SIGSTOP
+signals cannot be caught or ignored.  The
 .B SIGILL
 and
 .B SIGTRAP
index aec9a670c041a0b4db77362297e6d6ec61952ef5..ca1c73f6a9c1ee17bdd23d6d96d1b8cb23001d6c 100644 (file)
@@ -82,6 +82,7 @@ PUBLIC int do_sigaction()
   }
   mp->mp_sigact[m_in.sig_nr].sa_handler = svec.sa_handler;
   sigdelset(&svec.sa_mask, SIGKILL);
+  sigdelset(&svec.sa_mask, SIGSTOP);
   mp->mp_sigact[m_in.sig_nr].sa_mask = svec.sa_mask;
   mp->mp_sigact[m_in.sig_nr].sa_flags = svec.sa_flags;
   mp->mp_sigreturn = (vir_bytes) m_in.sig_ret;
@@ -160,6 +161,7 @@ PUBLIC int do_sigsuspend()
   mp->mp_sigmask2 = mp->mp_sigmask;    /* save the old mask */
   mp->mp_sigmask = (sigset_t) m_in.sig_set;
   sigdelset(&mp->mp_sigmask, SIGKILL);
+  sigdelset(&mp->mp_sigmask, SIGSTOP);
   mp->mp_flags |= SIGSUSPENDED;
   check_pending(mp);
   return(SUSPEND);
@@ -178,6 +180,7 @@ PUBLIC int do_sigreturn()
 
   mp->mp_sigmask = (sigset_t) m_in.sig_set;
   sigdelset(&mp->mp_sigmask, SIGKILL);
+  sigdelset(&mp->mp_sigmask, SIGSTOP);
 
   r = sys_sigreturn(who_e, (struct sigmsg *) m_in.sig_context);
   check_pending(mp);