SCCS-vsn: sys/kern/kern_sig.c 8.7
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)kern_sig.c 8.6 (Berkeley) %G%
+ * @(#)kern_sig.c 8.7 (Berkeley) %G%
*/
#define SIGPROP /* include signal properties table */
*/
#define SIGPROP /* include signal properties table */
register struct proc *p = curproc;
register struct sigacts *ps = p->p_sigacts;
register sig_t action;
register struct proc *p = curproc;
register struct sigacts *ps = p->p_sigacts;
register sig_t action;
+ int code, mask, returnmask;
#ifdef DIAGNOSTIC
if (signum == 0)
#ifdef DIAGNOSTIC
if (signum == 0)
p->p_sigmask |= ps->ps_catchmask[signum] | mask;
(void) spl0();
p->p_stats->p_ru.ru_nsignals++;
p->p_sigmask |= ps->ps_catchmask[signum] | mask;
(void) spl0();
p->p_stats->p_ru.ru_nsignals++;
- sendsig(action, signum, returnmask, 0);
+ if (ps->ps_sig != signum) {
+ code = 0;
+ } else {
+ code = ps->ps_code;
+ ps->ps_code = 0;
+ }
+ sendsig(action, signum, returnmask, code);