2001-07-22 Roland McGrath <roland@frob.com>
authorRoland McGrath <roland@gnu.org>
Mon, 23 Jul 2001 07:19:20 +0000 (07:19 +0000)
committerRoland McGrath <roland@gnu.org>
Mon, 23 Jul 2001 07:19:20 +0000 (07:19 +0000)
* hurd/hurdsig.c (_hurd_internal_post_signal): Support SA_RESETHAND
and SA_NODEFER options.  Spurred to action by Igor Khavkine.

hurd/hurdsig.c

index b6851d8..8471df2 100644 (file)
@@ -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).  */