diff options
| -rw-r--r-- | fs/exec.c | 8 | 
1 files changed, 3 insertions, 5 deletions
diff --git a/fs/exec.c b/fs/exec.c index ec5df9a3831..b4e5b8a9216 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -772,7 +772,6 @@ static int de_thread(struct task_struct *tsk)  	struct signal_struct *sig = tsk->signal;  	struct sighand_struct *oldsighand = tsk->sighand;  	spinlock_t *lock = &oldsighand->siglock; -	struct task_struct *leader = NULL;  	int count;  	if (thread_group_empty(tsk)) @@ -810,7 +809,7 @@ static int de_thread(struct task_struct *tsk)  	 * and to assume its PID:  	 */  	if (!thread_group_leader(tsk)) { -		leader = tsk->group_leader; +		struct task_struct *leader = tsk->group_leader;  		sig->notify_count = -1;	/* for exit_notify() */  		for (;;) { @@ -862,8 +861,9 @@ static int de_thread(struct task_struct *tsk)  		BUG_ON(leader->exit_state != EXIT_ZOMBIE);  		leader->exit_state = EXIT_DEAD; -  		write_unlock_irq(&tasklist_lock); + +		release_task(leader);  	}  	sig->group_exit_task = NULL; @@ -872,8 +872,6 @@ static int de_thread(struct task_struct *tsk)  no_thread_group:  	exit_itimers(sig);  	flush_itimer_signals(); -	if (leader) -		release_task(leader);  	if (atomic_read(&oldsighand->count) != 1) {  		struct sighand_struct *newsighand;  |