- rp = &u.u_signal[1];
- for (sigmask = 1; rp < &u.u_signal[NSIG]; sigmask <<= 1, rp++)
- /* disallow masked signals to carry over? */
- if (p->p_sigcatch & sigmask && (p->p_sigmask & sigmask) == 0) {
- (void) spl6();
- p->p_sigcatch &= ~sigmask;
- *rp = SIG_DFL;
- (void) spl0();
- }
+ /*
+ * Reset caught signals. Held signals
+ * remain held through p_sigmask.
+ */
+ while (p->p_sigcatch) {
+ (void) spl6();
+ i = ffs(p->p_sigcatch);
+ p->p_sigcatch &= ~(1 << (i - 1));
+ u.u_signal[i] = SIG_DFL;
+ (void) spl0();
+ }