aboutsummaryrefslogtreecommitdiff
path: root/hurd/hurdsig.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2001-07-23 07:19:20 +0000
committerRoland McGrath <roland@gnu.org>2001-07-23 07:19:20 +0000
commit5d83494fadbcd3730eb1e6e1ff19ddefad4072ce (patch)
tree04d28e93ace76f916ab3c80ac6b71501b8c063d3 /hurd/hurdsig.c
parenta9d61e2988f3af7117a7502980cb1b9c51f849f3 (diff)
downloadglibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.tar
glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.tar.gz
glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.tar.bz2
glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.zip
2001-07-22 Roland McGrath <roland@frob.com>
* hurd/hurdsig.c (_hurd_internal_post_signal): Support SA_RESETHAND and SA_NODEFER options. Spurred to action by Igor Khavkine.
Diffstat (limited to 'hurd/hurdsig.c')
-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). */