diff options
author | obrien <obrien@FreeBSD.org> | 2007-12-18 20:39:13 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2007-12-18 20:39:13 +0000 |
commit | ee337f2c349391c3e318ede0c5cff21592e02677 (patch) | |
tree | 794dd962ba52f7eaf97343fa100c8ce81314fc68 /sys/kern/kern_sig.c | |
parent | ff8db90dd7087915382193bcb6dfbc7cfedf32cc (diff) | |
download | FreeBSD-src-ee337f2c349391c3e318ede0c5cff21592e02677.zip FreeBSD-src-ee337f2c349391c3e318ede0c5cff21592e02677.tar.gz |
Be more exact with sigaction SA_SIGINFO handling.
Reviewed by: marcel
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 239c420..24547a1 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -662,7 +662,6 @@ kern_sigaction(td, sig, act, oact, flags) ps = p->p_sigacts; mtx_lock(&ps->ps_mtx); if (oact) { - oact->sa_handler = ps->ps_sigact[_SIG_IDX(sig)]; oact->sa_mask = ps->ps_catchmask[_SIG_IDX(sig)]; oact->sa_flags = 0; if (SIGISMEMBER(ps->ps_sigonstack, sig)) @@ -673,8 +672,12 @@ kern_sigaction(td, sig, act, oact, flags) oact->sa_flags |= SA_RESETHAND; if (SIGISMEMBER(ps->ps_signodefer, sig)) oact->sa_flags |= SA_NODEFER; - if (SIGISMEMBER(ps->ps_siginfo, sig)) + if (SIGISMEMBER(ps->ps_siginfo, sig)) { oact->sa_flags |= SA_SIGINFO; + oact->sa_sigaction = + (__siginfohandler_t *)ps->ps_sigact[_SIG_IDX(sig)]; + } else + oact->sa_handler = ps->ps_sigact[_SIG_IDX(sig)]; if (sig == SIGCHLD && ps->ps_flag & PS_NOCLDSTOP) oact->sa_flags |= SA_NOCLDSTOP; if (sig == SIGCHLD && ps->ps_flag & PS_NOCLDWAIT) |