Handle SIGSTOP more consistently and according to POSIX rules; it can no longer be ignored
This commit is contained in:
parent
ba83b7663d
commit
3615d93383
2 changed files with 6 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue