diff options
author | Roland McGrath <roland@gnu.org> | 1996-06-06 20:49:22 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-06-06 20:49:22 +0000 |
commit | 4d02a5b18a0c2702bfca949bc60187f53d6f39d2 (patch) | |
tree | c01194451c8f80184947b404186f744bb84fa9df /sysdeps/mach/hurd/sigaction.c | |
parent | e60062b76983ec534a6cb2ca77c664e3bc1e29e7 (diff) | |
download | glibc-4d02a5b18a0c2702bfca949bc60187f53d6f39d2.tar.gz glibc-4d02a5b18a0c2702bfca949bc60187f53d6f39d2.tar.xz glibc-4d02a5b18a0c2702bfca949bc60187f53d6f39d2.zip |
Thu Jun 6 16:12:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): For SIGNO==0 pending check, deliver a pending blocked signal if its action might be to ignore. * sysdeps/mach/hurd/sigaction.c: If new action is SIG_IGN or SIG_DFL and SIG is pending, wake up signal thread to check us. * hurd/hurdsig.c (_hurd_internal_post_signal): Don't mark a signal pending while blocked or stopped when the action is to ignore it. * hurd/hurdsig.c (_hurd_internal_post_signal: resume): Only set SS_SUSPENDED when the thread is really suspended. * elf/rtld.c (dl_main): Don't dereference _dl_rtld_map.l_next if null.
Diffstat (limited to 'sysdeps/mach/hurd/sigaction.c')
-rw-r--r-- | sysdeps/mach/hurd/sigaction.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/sigaction.c b/sysdeps/mach/hurd/sigaction.c index ebe70664be..df28131281 100644 --- a/sysdeps/mach/hurd/sigaction.c +++ b/sysdeps/mach/hurd/sigaction.c @@ -67,6 +67,14 @@ DEFUN(__sigaction, (sig, act, oact), __spin_lock (&ss->lock); pending = ss->pending & ~ss->blocked; } + else if (a.sa_handler == SIG_IGN || a.sa_handler == SIG_DFL) + /* We are changing to an action that might be to ignore SIG signals. + If SIG is blocked and pending and the new action is to ignore it, we + must remove it from the pending set now; if the action is changed + back and then SIG is unblocked, the signal pending now should not + arrive. So wake up the signal thread to check the new state and do + the right thing. */ + pending = ss->pending & __sigmask (sig); else pending = 0; |