current->state = TASK_INTERRUPTIBLE; expire = schedule_timeout(expire); 
expire = schedule_timeout_interruptible(expire); 
asmlinkage int irix_sigpoll_sys(unsigned long *set, struct irix5_siginfo *info,				struct timespec *tp){	long expire = MAX_SCHEDULE_TIMEOUT;	sigset_t kset;	int i, sig, error, timeo = 0;#ifdef DEBUG_SIG	printk("[%s:%d] irix_sigpoll_sys(%p,%p,%p)\n",	       current->comm, current->pid, set, info, tp);#endif	/* Must always specify the signal set. */	if (!set)		return -EINVAL;	if (!access_ok(VERIFY_READ, set, sizeof(kset))) {		error = -EFAULT;		goto out;	}	__copy_from_user(&kset, set, sizeof(set));	if (error)		goto out;	if (info && clear_user(info, sizeof(*info))) {		error = -EFAULT;		goto out;	}	if (tp) {		if (!access_ok(VERIFY_READ, tp, sizeof(*tp)))			return -EFAULT;		if (!tp->tv_sec && !tp->tv_nsec) {			error = -EINVAL;			goto out;		}		expire = timespectojiffies(tp)+(tp->tv_sec||tp->tv_nsec);	}	while(1) {		long tmp = 0;		current->state = TASK_INTERRUPTIBLE;		expire = schedule_timeout(expire);		for (i=0; i<=4; i++)			tmp |= (current->pending.signal.sig[i] & kset.sig[i]);		if (tmp)			break;		if (!expire) {			timeo = 1;			break;		}		if (signal_pending(current))			return -EINTR;	}	if (timeo)		return -EAGAIN;	for(sig = 1; i <= 65 /* IRIX_NSIG */; sig++) {		if (sigismember (&kset, sig))			continue;		if (sigismember (&current->pending.signal, sig)) {			/* XXX need more than this... */			if (info)				info->sig = sig;			error = 0;			goto out;		}	}	/* Should not get here, but do something sane if we do. */	error = -EINTR;out:	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/310b587e011ce02328c8e4c29eccd9f14d9007c5/irixsig.c/buggy/arch/mips/kernel/irixsig.c