current->state = TASK_INTERRUPTIBLE; timeout = schedule_timeout(timeout); 
timeout = schedule_timeout_interruptible(timeout); 
sys_rt_sigtimedwait(const sigset_t __user *uthese,		    siginfo_t __user *uinfo,		    const struct timespec __user *uts,		    size_t sigsetsize){	int ret, sig;	sigset_t these;	struct timespec ts;	siginfo_t info;	long timeout = 0;	/* XXX: Don't preclude handling different sized sigset_t's.  */	if (sigsetsize != sizeof(sigset_t))		return -EINVAL;	if (copy_from_user(&these, uthese, sizeof(these)))		return -EFAULT;			/*	 * Invert the set of allowed signals to get those we	 * want to block.	 */	sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP));	signotset(&these);	if (uts) {		if (copy_from_user(&ts, uts, sizeof(ts)))			return -EFAULT;		if (ts.tv_nsec >= 1000000000L || ts.tv_nsec < 0		    || ts.tv_sec < 0)			return -EINVAL;	}	spin_lock_irq(&current->sighand->siglock);	sig = dequeue_signal(current, &these, &info);	if (!sig) {		timeout = MAX_SCHEDULE_TIMEOUT;		if (uts)			timeout = (timespec_to_jiffies(&ts)				   + (ts.tv_sec || ts.tv_nsec));		if (timeout) {			/* None ready -- temporarily unblock those we're			 * interested while we are sleeping in so that we'll			 * be awakened when they arrive.  */			current->real_blocked = current->blocked;			sigandsets(&current->blocked, &current->blocked, &these);			recalc_sigpending();			spin_unlock_irq(&current->sighand->siglock);			current->state = TASK_INTERRUPTIBLE;			timeout = schedule_timeout(timeout);			try_to_freeze();			spin_lock_irq(&current->sighand->siglock);			sig = dequeue_signal(current, &these, &info);			current->blocked = current->real_blocked;			siginitset(&current->real_blocked, 0);			recalc_sigpending();		}	}	spin_unlock_irq(&current->sighand->siglock);	if (sig) {		ret = sig;		if (uinfo) {			if (copy_siginfo_to_user(uinfo, &info))				ret = -EFAULT;		}	} else {		ret = -EAGAIN;		if (timeout)			ret = -EINTR;	}	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/75bcc8c5e1de78616b04ef9f317a293a7c1c163c/signal.c/clean/kernel/signal.c