|
@@ -879,11 +879,13 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
spin_lock_irqsave(&t->sighand->siglock, flags);
|
|
spin_lock_irqsave(&t->sighand->siglock, flags);
|
|
- if (sigismember(&t->blocked, sig) || t->sighand->action[sig-1].sa.sa_handler == SIG_IGN) {
|
|
|
|
|
|
+ if (t->sighand->action[sig-1].sa.sa_handler == SIG_IGN) {
|
|
t->sighand->action[sig-1].sa.sa_handler = SIG_DFL;
|
|
t->sighand->action[sig-1].sa.sa_handler = SIG_DFL;
|
|
|
|
+ }
|
|
|
|
+ if (sigismember(&t->blocked, sig)) {
|
|
sigdelset(&t->blocked, sig);
|
|
sigdelset(&t->blocked, sig);
|
|
- recalc_sigpending_tsk(t);
|
|
|
|
}
|
|
}
|
|
|
|
+ recalc_sigpending_tsk(t);
|
|
ret = specific_send_sig_info(sig, info, t);
|
|
ret = specific_send_sig_info(sig, info, t);
|
|
spin_unlock_irqrestore(&t->sighand->siglock, flags);
|
|
spin_unlock_irqrestore(&t->sighand->siglock, flags);
|
|
|
|
|
|
@@ -893,15 +895,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
|
|
void
|
|
void
|
|
force_sig_specific(int sig, struct task_struct *t)
|
|
force_sig_specific(int sig, struct task_struct *t)
|
|
{
|
|
{
|
|
- unsigned long int flags;
|
|
|
|
-
|
|
|
|
- spin_lock_irqsave(&t->sighand->siglock, flags);
|
|
|
|
- if (t->sighand->action[sig-1].sa.sa_handler == SIG_IGN)
|
|
|
|
- t->sighand->action[sig-1].sa.sa_handler = SIG_DFL;
|
|
|
|
- sigdelset(&t->blocked, sig);
|
|
|
|
- recalc_sigpending_tsk(t);
|
|
|
|
- specific_send_sig_info(sig, SEND_SIG_FORCED, t);
|
|
|
|
- spin_unlock_irqrestore(&t->sighand->siglock, flags);
|
|
|
|
|
|
+ force_sig_info(sig, SEND_SIG_FORCED, t);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|