/* * Note that the fastpath in sys_times depends on __exit_signal having * updated the counters before a task is removed from the tasklist of * the process by __unhash_process. */ 
void release_task(struct task_struct * p){	int zap_leader;	task_t *leader;	struct dentry *proc_dentry;repeat: 	atomic_dec(&p->user->processes);	spin_lock(&p->proc_lock);	proc_dentry = proc_pid_unhash(p);	write_lock_irq(&tasklist_lock);	if (unlikely(p->ptrace))		__ptrace_unlink(p);	BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children));	__exit_signal(p);	__exit_sighand(p);	__unhash_process(p);	/*	 * If we are the last non-leader member of the thread	 * group, and the leader is zombie, then notify the	 * group leader's parent process. (if it wants notification.)	 */	zap_leader = 0;	leader = p->group_leader;	if (leader != p && thread_group_empty(leader) && leader->exit_state == EXIT_ZOMBIE) {		BUG_ON(leader->exit_signal == -1);		do_notify_parent(leader, leader->exit_signal);		/*		 * If we were the last child thread and the leader has		 * exited already, and the leader's parent ignores SIGCHLD,		 * then we are the one who should release the leader.		 *		 * do_notify_parent() will have marked it self-reaping in		 * that case.		 */		zap_leader = (leader->exit_signal == -1);	}	sched_exit(p);	write_unlock_irq(&tasklist_lock);	spin_unlock(&p->proc_lock);	proc_pid_flush(proc_dentry);	release_thread(p);	put_task_struct(p);	p = leader;	if (unlikely(zap_leader))		goto repeat;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/71a2224d7d1cefc23a1ac80bba421cc069cc3257/exit.c/buggy/kernel/exit.c