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>
This commit is contained in:
committed by
Matthew Wilcox
parent
338077e54e
commit
f021a3c2b1
@@ -456,15 +456,15 @@ void signal_wake_up(struct task_struct *t, int resume)
|
||||
set_tsk_thread_flag(t, TIF_SIGPENDING);
|
||||
|
||||
/*
|
||||
* For SIGKILL, we want to wake it up in the stopped/traced case.
|
||||
* We don't check t->state here because there is a race with it
|
||||
* For SIGKILL, we want to wake it up in the stopped/traced/killable
|
||||
* case. We don't check t->state here because there is a race with it
|
||||
* executing another processor and just now entering stopped state.
|
||||
* By using wake_up_state, we ensure the process will wake up and
|
||||
* handle its death signal.
|
||||
*/
|
||||
mask = TASK_INTERRUPTIBLE;
|
||||
if (resume)
|
||||
mask |= TASK_STOPPED | TASK_TRACED;
|
||||
mask |= TASK_WAKEKILL;
|
||||
if (!wake_up_state(t, mask))
|
||||
kick_process(t);
|
||||
}
|
||||
@@ -620,7 +620,7 @@ static void handle_stop_signal(int sig, struct task_struct *p)
|
||||
* Wake up the stopped thread _after_ setting
|
||||
* TIF_SIGPENDING
|
||||
*/
|
||||
state = TASK_STOPPED;
|
||||
state = __TASK_STOPPED;
|
||||
if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) {
|
||||
set_tsk_thread_flag(t, TIF_SIGPENDING);
|
||||
state |= TASK_INTERRUPTIBLE;
|
||||
|
Reference in New Issue
Block a user