if (sig == SIGCHLD && 
if (!tsk->ptrace && sig == SIGCHLD && 
void do_notify_parent(struct task_struct *tsk, int sig){	struct siginfo info;	unsigned long flags;	struct sighand_struct *psig;	BUG_ON(sig == -1); 	/* do_notify_parent_cldstop should have been called instead.  */ 	BUG_ON(tsk->state & (TASK_STOPPED|TASK_TRACED));	BUG_ON(!tsk->ptrace &&	       (tsk->group_leader != tsk || !thread_group_empty(tsk)));	info.si_signo = sig;	info.si_errno = 0;	info.si_pid = tsk->pid;	info.si_uid = tsk->uid;	/* FIXME: find out whether or not this is supposed to be c*time. */	info.si_utime = cputime_to_jiffies(cputime_add(tsk->utime,						       tsk->signal->utime));	info.si_stime = cputime_to_jiffies(cputime_add(tsk->stime,						       tsk->signal->stime));	info.si_status = tsk->exit_code & 0x7f;	if (tsk->exit_code & 0x80)		info.si_code = CLD_DUMPED;	else if (tsk->exit_code & 0x7f)		info.si_code = CLD_KILLED;	else {		info.si_code = CLD_EXITED;		info.si_status = tsk->exit_code >> 8;	}	psig = tsk->parent->sighand;	spin_lock_irqsave(&psig->siglock, flags);	if (sig == SIGCHLD &&	    (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||	     (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {		/*		 * We are exiting and our parent doesn't care.  POSIX.1		 * defines special semantics for setting SIGCHLD to SIG_IGN		 * or setting the SA_NOCLDWAIT flag: we should be reaped		 * automatically and not left for our parent's wait4 call.		 * Rather than having the parent do it as a magic kind of		 * signal handler, we just set this to tell do_exit that we		 * can be cleaned up without becoming a zombie.  Note that		 * we still call __wake_up_parent in this case, because a		 * blocked sys_wait4 might now return -ECHILD.		 *		 * Whether we send SIGCHLD or not for SA_NOCLDWAIT		 * is implementation-defined: we do (if you don't want		 * it, just use SIG_IGN instead).		 */		tsk->exit_signal = -1;		if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)			sig = 0;	}	if (valid_signal(sig) && sig > 0)		__group_send_sig_info(sig, &info, tsk->parent);	__wake_up_parent(tsk, tsk->parent);	spin_unlock_irqrestore(&psig->siglock, flags);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/7ed0175a462c4c30f6df6fac1cccac058f997739/signal.c/clean/kernel/signal.c