- default:
- /*
- * Normal or deferring catch; revert to default.
- */
- (void) spl6();
- *rp = SIG_DFL;
- if ((int)*rp & 1)
- u.u_procp->p_siga0 |= sigmask;
- else
- u.u_procp->p_siga0 &= ~sigmask;
- if ((int)*rp & 2)
- u.u_procp->p_siga1 |= sigmask;
- else
- u.u_procp->p_siga1 &= ~sigmask;
- (void) spl0();
- continue;
- }
+ /*
+ * 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();