As per further discussions on hackers redo the SIGCHLD patch to not generate
an unexpected user-visible side effect with the sigaction flags. Also cleanup a minor union issue. Submitted by: Rudolf Cejka <cejkar@dcse.fee.vutbr.cz> MFC addendum: MFC will be combined w/ original commit MFC after: 3 days
This commit is contained in:
parent
f322ed6873
commit
5064dfdc7c
@ -329,10 +329,11 @@ exit1(p, rv)
|
||||
|
||||
/*
|
||||
* Notify parent that we're gone. If parent has the PS_NOCLDWAIT
|
||||
* flag set, notify process 1 instead (and hope it will handle
|
||||
* this situation).
|
||||
* flag set, or if the handler is set to SIG_IGN, notify process
|
||||
* 1 instead (and hope it will handle this situation).
|
||||
*/
|
||||
if (p->p_pptr->p_procsig->ps_flag & PS_NOCLDWAIT) {
|
||||
if ((p->p_pptr->p_procsig->ps_flag & PS_NOCLDWAIT)
|
||||
|| p->p_pptr->p_sigacts->ps_sigact[_SIG_IDX(SIGCHLD)] == SIG_IGN) {
|
||||
struct proc *pp = p->p_pptr;
|
||||
proc_reparent(p, initproc);
|
||||
/*
|
||||
|
@ -255,11 +255,11 @@ do_sigaction(p, sig, act, oact, old)
|
||||
ps->ps_catchmask[_SIG_IDX(sig)] = act->sa_mask;
|
||||
SIG_CANTMASK(ps->ps_catchmask[_SIG_IDX(sig)]);
|
||||
if (act->sa_flags & SA_SIGINFO) {
|
||||
ps->ps_sigact[_SIG_IDX(sig)] = act->sa_handler;
|
||||
SIGADDSET(ps->ps_siginfo, sig);
|
||||
} else {
|
||||
ps->ps_sigact[_SIG_IDX(sig)] =
|
||||
(__sighandler_t *)act->sa_sigaction;
|
||||
SIGADDSET(ps->ps_siginfo, sig);
|
||||
} else {
|
||||
ps->ps_sigact[_SIG_IDX(sig)] = act->sa_handler;
|
||||
SIGDELSET(ps->ps_siginfo, sig);
|
||||
}
|
||||
if (!(act->sa_flags & SA_RESTART))
|
||||
@ -289,8 +289,7 @@ do_sigaction(p, sig, act, oact, old)
|
||||
p->p_procsig->ps_flag |= PS_NOCLDSTOP;
|
||||
else
|
||||
p->p_procsig->ps_flag &= ~PS_NOCLDSTOP;
|
||||
if ((act->sa_flags & SA_NOCLDWAIT) ||
|
||||
ps->ps_sigact[_SIG_IDX(SIGCHLD)] == SIG_IGN) {
|
||||
if (act->sa_flags & SA_NOCLDWAIT) {
|
||||
/*
|
||||
* Paranoia: since SA_NOCLDWAIT is implemented
|
||||
* by reparenting the dying child to PID 1 (and
|
||||
|
Loading…
x
Reference in New Issue
Block a user