diff options
author | Matthew Wilcox <matthew@wil.cx> | 2007-12-06 11:13:16 -0500 |
---|---|---|
committer | Matthew Wilcox <willy@linux.intel.com> | 2007-12-06 17:35:28 -0500 |
commit | f021a3c2b14d0dd082c2cee890c204d9e1dee52b (patch) | |
tree | aa37eb6845605de6c69a70ac8cc3b22e2b0170a6 /kernel/signal.c | |
parent | 338077e54e17e656da470a84724b773816207316 (diff) |
Add TASK_WAKEKILL
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index c5a401aa715c..fd4797f30628 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -456,15 +456,15 @@ void signal_wake_up(struct task_struct *t, int resume) | |||
456 | set_tsk_thread_flag(t, TIF_SIGPENDING); | 456 | set_tsk_thread_flag(t, TIF_SIGPENDING); |
457 | 457 | ||
458 | /* | 458 | /* |
459 | * For SIGKILL, we want to wake it up in the stopped/traced case. | 459 | * For SIGKILL, we want to wake it up in the stopped/traced/killable |
460 | * We don't check t->state here because there is a race with it | 460 | * case. We don't check t->state here because there is a race with it |
461 | * executing another processor and just now entering stopped state. | 461 | * executing another processor and just now entering stopped state. |
462 | * By using wake_up_state, we ensure the process will wake up and | 462 | * By using wake_up_state, we ensure the process will wake up and |
463 | * handle its death signal. | 463 | * handle its death signal. |
464 | */ | 464 | */ |
465 | mask = TASK_INTERRUPTIBLE; | 465 | mask = TASK_INTERRUPTIBLE; |
466 | if (resume) | 466 | if (resume) |
467 | mask |= TASK_STOPPED | TASK_TRACED; | 467 | mask |= TASK_WAKEKILL; |
468 | if (!wake_up_state(t, mask)) | 468 | if (!wake_up_state(t, mask)) |
469 | kick_process(t); | 469 | kick_process(t); |
470 | } | 470 | } |
@@ -620,7 +620,7 @@ static void handle_stop_signal(int sig, struct task_struct *p) | |||
620 | * Wake up the stopped thread _after_ setting | 620 | * Wake up the stopped thread _after_ setting |
621 | * TIF_SIGPENDING | 621 | * TIF_SIGPENDING |
622 | */ | 622 | */ |
623 | state = TASK_STOPPED; | 623 | state = __TASK_STOPPED; |
624 | if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) { | 624 | if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) { |
625 | set_tsk_thread_flag(t, TIF_SIGPENDING); | 625 | set_tsk_thread_flag(t, TIF_SIGPENDING); |
626 | state |= TASK_INTERRUPTIBLE; | 626 | state |= TASK_INTERRUPTIBLE; |