q->lock = &p->sighand->siglock; 
send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p){	unsigned long flags;	int ret = 0;	BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));	read_lock(&tasklist_lock);	if (unlikely(p->flags & PF_EXITING)) {		ret = -1;		goto out_err;	}	spin_lock_irqsave(&p->sighand->siglock, flags);	if (unlikely(!list_empty(&q->list))) {		/*		 * If an SI_TIMER entry is already queue just increment		 * the overrun count.		 */		if (q->info.si_code != SI_TIMER)			BUG();		q->info.si_overrun++;		goto out;	}	/* Short-circuit ignored signals.  */	if (sig_ignored(p, sig)) {		ret = 1;		goto out;	}	q->lock = &p->sighand->siglock;	list_add_tail(&q->list, &p->pending.list);	sigaddset(&p->pending.signal, sig);	if (!sigismember(&p->blocked, sig))		signal_wake_up(p, sig == SIGKILL);out:	spin_unlock_irqrestore(&p->sighand->siglock, flags);out_err:	read_unlock(&tasklist_lock);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/19a4fcb531659f2f7d18b5d04cee039176e9540d/signal.c/buggy/kernel/signal.c