diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index b6851d86a6..8471df27d7 100644 --- a/hurd/hurdsig.c +++ b/hurd/hurdsig.c @@ -926,9 +926,15 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss, /* 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). */