diff options
author | Roland McGrath <roland@gnu.org> | 2001-07-23 07:19:20 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2001-07-23 07:19:20 +0000 |
commit | 5d83494fadbcd3730eb1e6e1ff19ddefad4072ce (patch) | |
tree | 04d28e93ace76f916ab3c80ac6b71501b8c063d3 /hurd/hurdsig.c | |
parent | a9d61e2988f3af7117a7502980cb1b9c51f849f3 (diff) | |
download | glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.zip glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.tar.gz glibc-5d83494fadbcd3730eb1e6e1ff19ddefad4072ce.tar.bz2 |
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.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index b6851d8..8471df2 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). */ |