diff options
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index a75b6a7f458a..5b4a5dcce8f8 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -720,6 +720,7 @@ static void exit_notify(struct task_struct *tsk, int group_dead) | |||
720 | if (group_dead) | 720 | if (group_dead) |
721 | kill_orphaned_pgrp(tsk->group_leader, NULL); | 721 | kill_orphaned_pgrp(tsk->group_leader, NULL); |
722 | 722 | ||
723 | tsk->exit_state = EXIT_ZOMBIE; | ||
723 | if (unlikely(tsk->ptrace)) { | 724 | if (unlikely(tsk->ptrace)) { |
724 | int sig = thread_group_leader(tsk) && | 725 | int sig = thread_group_leader(tsk) && |
725 | thread_group_empty(tsk) && | 726 | thread_group_empty(tsk) && |
@@ -733,9 +734,10 @@ static void exit_notify(struct task_struct *tsk, int group_dead) | |||
733 | autoreap = true; | 734 | autoreap = true; |
734 | } | 735 | } |
735 | 736 | ||
736 | tsk->exit_state = autoreap ? EXIT_DEAD : EXIT_ZOMBIE; | 737 | if (autoreap) { |
737 | if (tsk->exit_state == EXIT_DEAD) | 738 | tsk->exit_state = EXIT_DEAD; |
738 | list_add(&tsk->ptrace_entry, &dead); | 739 | list_add(&tsk->ptrace_entry, &dead); |
740 | } | ||
739 | 741 | ||
740 | /* mt-exec, de_thread() is waiting for group leader */ | 742 | /* mt-exec, de_thread() is waiting for group leader */ |
741 | if (unlikely(tsk->signal->notify_count < 0)) | 743 | if (unlikely(tsk->signal->notify_count < 0)) |