|
@@ -290,15 +290,14 @@ static int zap_process(struct task_struct *start, int exit_code, int flags)
|
|
|
start->signal->group_exit_code = exit_code;
|
|
|
start->signal->group_stop_count = 0;
|
|
|
|
|
|
- t = start;
|
|
|
- do {
|
|
|
+ for_each_thread(start, t) {
|
|
|
task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
|
|
|
if (t != current && t->mm) {
|
|
|
sigaddset(&t->pending.signal, SIGKILL);
|
|
|
signal_wake_up(t, 1);
|
|
|
nr++;
|
|
|
}
|
|
|
- } while_each_thread(start, t);
|
|
|
+ }
|
|
|
|
|
|
return nr;
|
|
|
}
|
|
@@ -360,18 +359,18 @@ static int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
continue;
|
|
|
if (g->flags & PF_KTHREAD)
|
|
|
continue;
|
|
|
- p = g;
|
|
|
- do {
|
|
|
- if (p->mm) {
|
|
|
- if (unlikely(p->mm == mm)) {
|
|
|
- lock_task_sighand(p, &flags);
|
|
|
- nr += zap_process(p, exit_code,
|
|
|
- SIGNAL_GROUP_EXIT);
|
|
|
- unlock_task_sighand(p, &flags);
|
|
|
- }
|
|
|
- break;
|
|
|
+
|
|
|
+ for_each_thread(g, p) {
|
|
|
+ if (unlikely(!p->mm))
|
|
|
+ continue;
|
|
|
+ if (unlikely(p->mm == mm)) {
|
|
|
+ lock_task_sighand(p, &flags);
|
|
|
+ nr += zap_process(p, exit_code,
|
|
|
+ SIGNAL_GROUP_EXIT);
|
|
|
+ unlock_task_sighand(p, &flags);
|
|
|
}
|
|
|
- } while_each_thread(g, p);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
rcu_read_unlock();
|
|
|
done:
|