forked from Minki/linux
signals: de_thread: simplify the ->child_reaper switching
Now that we rely on SIGNAL_UNKILLABLE flag, de_thread() doesn't need the nasty hack to kill the old ->child_reaper during the mt-exec. This also means we can avoid taking tasklist_lock around zap_other_threads(). Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Cc: Roland McGrath <roland@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fae5fa44f1
commit
7a5e873f09
15
fs/exec.c
15
fs/exec.c
@ -766,9 +766,7 @@ static int de_thread(struct task_struct *tsk)
|
||||
|
||||
/*
|
||||
* Kill all other threads in the thread group.
|
||||
* We must hold tasklist_lock to call zap_other_threads.
|
||||
*/
|
||||
read_lock(&tasklist_lock);
|
||||
spin_lock_irq(lock);
|
||||
if (signal_group_exit(sig)) {
|
||||
/*
|
||||
@ -776,21 +774,10 @@ static int de_thread(struct task_struct *tsk)
|
||||
* return so that the signal is processed.
|
||||
*/
|
||||
spin_unlock_irq(lock);
|
||||
read_unlock(&tasklist_lock);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* child_reaper ignores SIGKILL, change it now.
|
||||
* Reparenting needs write_lock on tasklist_lock,
|
||||
* so it is safe to do it under read_lock.
|
||||
*/
|
||||
if (unlikely(tsk->group_leader == task_child_reaper(tsk)))
|
||||
task_active_pid_ns(tsk)->child_reaper = tsk;
|
||||
|
||||
sig->group_exit_task = tsk;
|
||||
zap_other_threads(tsk);
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
/* Account for the thread group leader hanging around: */
|
||||
count = thread_group_leader(tsk) ? 1 : 2;
|
||||
@ -821,6 +808,8 @@ static int de_thread(struct task_struct *tsk)
|
||||
schedule();
|
||||
}
|
||||
|
||||
if (unlikely(task_child_reaper(tsk) == leader))
|
||||
task_active_pid_ns(tsk)->child_reaper = tsk;
|
||||
/*
|
||||
* The only record we have of the real-time age of a
|
||||
* process, regardless of execs it's done, is start_time.
|
||||
|
Loading…
Reference in New Issue
Block a user