aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/signal.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index 1d8f84c5c6ee..1bf3c39d6109 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -879,11 +879,13 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
879 int ret; 879 int ret;
880 880
881 spin_lock_irqsave(&t->sighand->siglock, flags); 881 spin_lock_irqsave(&t->sighand->siglock, flags);
882 if (sigismember(&t->blocked, sig) || t->sighand->action[sig-1].sa.sa_handler == SIG_IGN) { 882 if (t->sighand->action[sig-1].sa.sa_handler == SIG_IGN) {
883 t->sighand->action[sig-1].sa.sa_handler = SIG_DFL; 883 t->sighand->action[sig-1].sa.sa_handler = SIG_DFL;
884 }
885 if (sigismember(&t->blocked, sig)) {
884 sigdelset(&t->blocked, sig); 886 sigdelset(&t->blocked, sig);
885 recalc_sigpending_tsk(t);
886 } 887 }
888 recalc_sigpending_tsk(t);
887 ret = specific_send_sig_info(sig, info, t); 889 ret = specific_send_sig_info(sig, info, t);
888 spin_unlock_irqrestore(&t->sighand->siglock, flags); 890 spin_unlock_irqrestore(&t->sighand->siglock, flags);
889 891
@@ -893,15 +895,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
893void 895void
894force_sig_specific(int sig, struct task_struct *t) 896force_sig_specific(int sig, struct task_struct *t)
895{ 897{
896 unsigned long int flags; 898 force_sig_info(sig, SEND_SIG_FORCED, t);
897
898 spin_lock_irqsave(&t->sighand->siglock, flags);
899 if (t->sighand->action[sig-1].sa.sa_handler == SIG_IGN)
900 t->sighand->action[sig-1].sa.sa_handler = SIG_DFL;
901 sigdelset(&t->blocked, sig);
902 recalc_sigpending_tsk(t);
903 specific_send_sig_info(sig, SEND_SIG_FORCED, t);
904 spin_unlock_irqrestore(&t->sighand->siglock, flags);
905} 899}
906 900
907/* 901/*