From f7788d8cc230274df28d9ab115cec3bc8bb3467d Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Wed, 30 Apr 2008 00:53:05 -0700 Subject: [PATCH] --- yaml --- r: 95142 b: refs/heads/master c: 80fe728d593e3a048a56610de932919f7d6d968a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/signal.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index d3779d5db190..6b50947778cf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7a5e873f096e04e6d8719e4ecb7b70d2decca503 +refs/heads/master: 80fe728d593e3a048a56610de932919f7d6d968a diff --git a/trunk/kernel/signal.c b/trunk/kernel/signal.c index 646a8765696a..9ac737e53df1 100644 --- a/trunk/kernel/signal.c +++ b/trunk/kernel/signal.c @@ -892,7 +892,8 @@ specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t) * since we do not want to have a signal handler that was blocked * be invoked when user space had explicitly blocked it. * - * We don't want to have recursive SIGSEGV's etc, for example. + * We don't want to have recursive SIGSEGV's etc, for example, + * that is why we also clear SIGNAL_UNKILLABLE. */ int force_sig_info(int sig, struct siginfo *info, struct task_struct *t) @@ -912,6 +913,8 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) recalc_sigpending_and_wake(t); } } + if (action->sa.sa_handler == SIG_DFL) + t->signal->flags &= ~SIGNAL_UNKILLABLE; ret = specific_send_sig_info(sig, info, t); spin_unlock_irqrestore(&t->sighand->siglock, flags);