summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.topdeps3
-rw-r--r--.topmsg8
-rw-r--r--hurd/hurdsig.c4
-rw-r--r--sysdeps/mach/hurd/fork.c4
-rw-r--r--sysdeps/mach/hurd/spawni.c2
5 files changed, 10 insertions, 11 deletions
diff --git a/.topdeps b/.topdeps
index f4e817e53f..86cff0f2ba 100644
--- a/.topdeps
+++ b/.topdeps
@@ -1,2 +1 @@
-t/hurdsig-global-dispositions
-cvs/exc2signal-template
+t/hurdsig-SA_SIGINFO
diff --git a/.topmsg b/.topmsg
index 9ac0a83e6e..ff94ea0780 100644
--- a/.topmsg
+++ b/.topmsg
@@ -1,6 +1,6 @@
From: Jeremie Koenig <jk@jk.fr.eu.org>
-Subject: [PATCH] implement SA_SIGINFO signal handlers.
+Subject: [PATCH] Small signal fixes
- 52baaca Hurd signals: Copy bits/sigaction.h
- 4232c66 Hurd signals: SA_SIGINFO support
- 1831cfe Hurd signals: Use POSIX sigcodes
+ 22e7268 Hurd signals: fix sigwait for pending signals
+ da8bf5e Hurd signals: clear the pending mask in fork and spawn
+ 8e87205 Hurd signals: don't drop blocked ignored signals
diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c
index b03dad4f5f..6c7fb050d4 100644
--- a/hurd/hurdsig.c
+++ b/hurd/hurdsig.c
@@ -857,9 +857,7 @@ post_signal (struct hurd_sigstate *ss,
}
/* Handle receipt of a blocked signal, or any signal while stopped. */
- if (act != ignore && /* Signals ignored now are forgotten now. */
- __sigismember (&blocked, signo) ||
- (signo != SIGKILL && _hurd_stopped))
+ if (__sigismember (&blocked, signo) || (signo != SIGKILL && _hurd_stopped))
{
mark_pending ();
act = ignore;
diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c
index c70b0577e7..5b700027a3 100644
--- a/sysdeps/mach/hurd/fork.c
+++ b/sysdeps/mach/hurd/fork.c
@@ -668,8 +668,10 @@ __fork (void)
err = __USEPORT (PROC, __proc_getpids (port, &_hurd_pid, &_hurd_ppid,
&_hurd_orphaned));
- /* Forking clears the trace flag. */
+ /* Forking clears the trace flag and pending masks. */
__sigemptyset (&_hurdsig_traced);
+ __sigemptyset (&_hurd_global_sigstate->pending);
+ __sigemptyset (&ss->pending);
/* Run things that want to run in the child task to set up. */
RUN_HOOK (_hurd_fork_child_hook, ());
diff --git a/sysdeps/mach/hurd/spawni.c b/sysdeps/mach/hurd/spawni.c
index 12fa457c02..51e0e5bcb7 100644
--- a/sysdeps/mach/hurd/spawni.c
+++ b/sysdeps/mach/hurd/spawni.c
@@ -240,7 +240,7 @@ __spawni (pid_t *pid, const char *file,
_hurd_sigstate_lock (ss);
ints[INIT_SIGMASK] = ss->blocked;
- ints[INIT_SIGPENDING] = _hurd_sigstate_pending (ss); /* XXX really? */
+ ints[INIT_SIGPENDING] = 0;
ints[INIT_SIGIGN] = 0;
/* Unless we were asked to reset all handlers to SIG_DFL,
pass down the set of signals that were set to SIG_IGN. */