if (info->si_code == SI_TIMER) /* * Set up a return to indicate that we dropped * the signal. */ ret = info->si_sys_private; 
static int send_signal(int sig, struct siginfo *info, struct task_struct *t,			struct sigpending *signals){	struct sigqueue * q = NULL;	int ret = 0;	/*	 * fast-pathed signals for kernel-internal things like SIGSTOP	 * or SIGKILL.	 */	if (info == SEND_SIG_FORCED)		goto out_set;	/* Real-time signals must be queued if sent by sigqueue, or	   some other real-time mechanism.  It is implementation	   defined whether kill() does so.  We attempt to do so, on	   the principle of least surprise, but since kill is not	   allowed to fail with EAGAIN when low on memory we just	   make sure at least one signal gets delivered and don't	   pass on the info struct.  */	q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN &&					     (is_si_special(info) ||					      info->si_code >= 0)));	if (q) {		list_add_tail(&q->list, &signals->list);		switch ((unsigned long) info) {		case (unsigned long) SEND_SIG_NOINFO:			q->info.si_signo = sig;			q->info.si_errno = 0;			q->info.si_code = SI_USER;			q->info.si_pid = current->pid;			q->info.si_uid = current->uid;			break;		case (unsigned long) SEND_SIG_PRIV:			q->info.si_signo = sig;			q->info.si_errno = 0;			q->info.si_code = SI_KERNEL;			q->info.si_pid = 0;			q->info.si_uid = 0;			break;		default:			copy_siginfo(&q->info, info);			break;		}	} else if (!is_si_special(info)) {		if (sig >= SIGRTMIN && info->si_code != SI_USER)		/*		 * Queue overflow, abort.  We may abort if the signal was rt		 * and sent by user using something other than kill().		 */			return -EAGAIN;		if (info->si_code == SI_TIMER)			/*			 * Set up a return to indicate that we dropped 			 * the signal.			 */			ret = info->si_sys_private;	}out_set:	sigaddset(&signals->signal, sig);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ae6866c377943de73e2c95398ff0120516f167ce/signal.c/clean/kernel/signal.c