|
@@ -660,8 +660,10 @@ static inline int legacy_queue(struct sigpending *signals, int sig)
|
|
static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
|
|
static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
|
|
struct sigpending *signals)
|
|
struct sigpending *signals)
|
|
{
|
|
{
|
|
- struct sigqueue * q = NULL;
|
|
|
|
|
|
+ struct sigqueue *q;
|
|
|
|
|
|
|
|
+ assert_spin_locked(&t->sighand->siglock);
|
|
|
|
+ handle_stop_signal(sig, t);
|
|
/*
|
|
/*
|
|
* Short-circuit ignored signals and support queuing
|
|
* Short-circuit ignored signals and support queuing
|
|
* exactly one non-rt signal, so that we can get more
|
|
* exactly one non-rt signal, so that we can get more
|
|
@@ -766,9 +768,6 @@ specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- BUG_ON(!irqs_disabled());
|
|
|
|
- assert_spin_locked(&t->sighand->siglock);
|
|
|
|
-
|
|
|
|
ret = send_signal(sig, info, t, &t->pending);
|
|
ret = send_signal(sig, info, t, &t->pending);
|
|
if (ret <= 0)
|
|
if (ret <= 0)
|
|
return ret;
|
|
return ret;
|
|
@@ -923,9 +922,6 @@ __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- assert_spin_locked(&p->sighand->siglock);
|
|
|
|
- handle_stop_signal(sig, p);
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Put this signal on the shared-pending queue, or fail with EAGAIN.
|
|
* Put this signal on the shared-pending queue, or fail with EAGAIN.
|
|
* We always use the shared queue for process-wide signals,
|
|
* We always use the shared queue for process-wide signals,
|
|
@@ -2241,7 +2237,6 @@ static int do_tkill(int tgid, int pid, int sig)
|
|
*/
|
|
*/
|
|
if (!error && sig && p->sighand) {
|
|
if (!error && sig && p->sighand) {
|
|
spin_lock_irq(&p->sighand->siglock);
|
|
spin_lock_irq(&p->sighand->siglock);
|
|
- handle_stop_signal(sig, p);
|
|
|
|
error = specific_send_sig_info(sig, &info, p);
|
|
error = specific_send_sig_info(sig, &info, p);
|
|
spin_unlock_irq(&p->sighand->siglock);
|
|
spin_unlock_irq(&p->sighand->siglock);
|
|
}
|
|
}
|