/* Backdoor extra argument to signal handler. */
scp->sc_error = detail->error;
- /* Block SIGNO and requested signals while running the handler. */
scp->sc_mask = ss->blocked;
- ss->blocked |= __sigmask (signo) | ss->actions[signo].sa_mask;
+
+ if ((ss->actions[signo].sa_flags & SA_NODEFER) == 0)
+ /* Block SIGNO and requested signals while running the handler. */
+ ss->blocked |= __sigmask (signo) | ss->actions[signo].sa_mask;
+
+ if (ss->actions[signo].sa_flags & SA_RESETHAND)
+ /* Silly SysV/Linux compatibility option. */
+ ss->actions[signo].sa_handler = SIG_DFL;
/* Start the thread running the handler (or possibly waiting for an
RPC reply before running the handler). */