* [PATCH 3/3] Consolidate checking for ignored/legacy signals
@ 2008-02-12 10:25 Pavel Emelyanov
0 siblings, 0 replies; only message in thread
From: Pavel Emelyanov @ 2008-02-12 10:25 UTC (permalink / raw)
To: Andrew Morton; +Cc: Linux Kernel Mailing List, Oleg Nesterov
Two callers for send_signal() - the specific_send_sig_info and
the __group_send_sig_info - both check for sig to be ignored or
already queued.
Move these checks into send_signal() and make it return 1 to
indicate that the signal is dropped, but there's no error in
this.
Besides, merge comments and spell-check them.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
kernel/signal.c | 37 +++++++++++++++----------------------
1 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/kernel/signal.c b/kernel/signal.c
index 384d188..f98ec5f 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -668,6 +668,14 @@ static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
struct sigqueue * q = NULL;
/*
+ * Short-circuit ignored signals and support queuing
+ * exactly one non-rt signal, so that we can get more
+ * detailed information about the cause of the signal.
+ */
+ if (sig_ignored(t, sig) || legacy_queue(signals, sig))
+ return 1;
+
+ /*
* Deliver the signal to listening signalfds. This must be called
* with the sighand lock held.
*/
@@ -766,21 +774,13 @@ specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
BUG_ON(!irqs_disabled());
assert_spin_locked(&t->sighand->siglock);
- /* Short-circuit ignored signals. */
- if (sig_ignored(t, sig))
- goto out;
-
- /* Support queueing exactly one non-rt signal, so that we
- can get more detailed information about the cause of
- the signal. */
- if (legacy_queue(&t->pending, sig))
- goto out;
-
ret = send_signal(sig, info, t, &t->pending);
+ if (ret < 0)
+ return ret;
+
if (!ret && !sigismember(&t->blocked, sig))
signal_wake_up(t, sig == SIGKILL);
-out:
- return ret;
+ return 0;
}
/*
@@ -930,24 +930,17 @@ __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
assert_spin_locked(&p->sighand->siglock);
handle_stop_signal(sig, p);
- /* Short-circuit ignored signals. */
- if (sig_ignored(p, sig))
- return ret;
-
- if (legacy_queue(&p->signal->shared_pending, sig))
- /* This is a non-RT signal and we already have one queued. */
- return ret;
-
/*
* Put this signal on the shared-pending queue, or fail with EAGAIN.
* We always use the shared queue for process-wide signals,
* to avoid several races.
*/
ret = send_signal(sig, info, p, &p->signal->shared_pending);
- if (unlikely(ret))
+ if (unlikely(ret < 0))
return ret;
- __group_complete_signal(sig, p);
+ if (!ret)
+ __group_complete_signal(sig, p);
return 0;
}
--
1.5.3.4
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-12 10:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-12 10:25 [PATCH 3/3] Consolidate checking for ignored/legacy signals Pavel Emelyanov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.