 if (to_self) parent = tsk->parent; else { tsk = tsk->group_leader; parent = tsk->real_parent; } 
do_notify_parent_cldstop(struct task_struct *tsk, struct task_struct *parent,			 int why){	struct siginfo info;	unsigned long flags;	struct sighand_struct *sighand;	info.si_signo = SIGCHLD;	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(tsk->utime);	info.si_stime = cputime_to_jiffies(tsk->stime); 	info.si_code = why; 	switch (why) { 	case CLD_CONTINUED: 		info.si_status = SIGCONT; 		break; 	case CLD_STOPPED: 		info.si_status = tsk->signal->group_exit_code & 0x7f; 		break; 	case CLD_TRAPPED: 		info.si_status = tsk->exit_code & 0x7f; 		break; 	default: 		BUG(); 	}	sighand = parent->sighand;	spin_lock_irqsave(&sighand->siglock, flags);	if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&	    !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))		__group_send_sig_info(SIGCHLD, &info, parent);	/*	 * Even if SIGCHLD is not generated, we must wake up wait4 calls.	 */	__wake_up_parent(tsk, parent);	spin_unlock_irqrestore(&sighand->siglock, flags);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/bc505a478d3fffcfb269b72f64df4510305cfe81/signal.c/clean/kernel/signal.c