q->lock = &p->sighand->siglock; 
send_group_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);	spin_lock_irqsave(&p->sighand->siglock, flags);	handle_stop_signal(sig, p);	/* Short-circuit ignored signals.  */	if (sig_ignored(p, sig)) {		ret = 1;		goto out;	}	if (unlikely(!list_empty(&q->list))) {		/*		 * If an SI_TIMER entry is already queue just increment		 * the overrun count.  Other uses should not try to		 * send the signal multiple times.		 */		if (q->info.si_code != SI_TIMER)			BUG();		q->info.si_overrun++;		goto out;	} 	/*	 * Put this signal on the shared-pending queue.	 * We always use the shared queue for process-wide signals,	 * to avoid several races.	 */	q->lock = &p->sighand->siglock;	list_add_tail(&q->list, &p->signal->shared_pending.list);	sigaddset(&p->signal->shared_pending.signal, sig);	__group_complete_signal(sig, p);out:	spin_unlock_irqrestore(&p->sighand->siglock, flags);	read_unlock(&tasklist_lock);	return(ret);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/19a4fcb531659f2f7d18b5d04cee039176e9540d/signal.c/buggy/kernel/signal.c