in sendsig, pass ps_code when signum agrees with ps_sig (from Karels and Hibler)
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Tue, 19 Apr 1994 14:00:46 +0000 (06:00 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Tue, 19 Apr 1994 14:00:46 +0000 (06:00 -0800)
SCCS-vsn: sys/kern/kern_sig.c 8.7

usr/src/sys/kern/kern_sig.c

index 6868ab5..4e399b3 100644 (file)
@@ -9,7 +9,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 */
@@ -998,7 +998,7 @@ postsig(signum)
        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 mask, returnmask;
+       int code, mask, returnmask;
 
 #ifdef DIAGNOSTIC
        if (signum == 0)
 
 #ifdef DIAGNOSTIC
        if (signum == 0)
@@ -1046,7 +1046,13 @@ postsig(signum)
                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);
        }
 }
 
        }
 }