about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--hurd/hurdsig.c10
1 files changed, 8 insertions, 2 deletions
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).  */