current->state = TASK_INTERRUPTIBLE; timeout = schedule_timeout(timeout); 
timeout = schedule_timeout_interruptible(timeout); 
compat_sys_rt_sigtimedwait (compat_sigset_t __user *uthese,		struct compat_siginfo __user *uinfo,		struct compat_timespec __user *uts, compat_size_t sigsetsize){	compat_sigset_t s32;	sigset_t s;	int sig;	struct timespec t;	siginfo_t info;	long ret, timeout = 0;	if (sigsetsize != sizeof(sigset_t))		return -EINVAL;	if (copy_from_user(&s32, uthese, sizeof(compat_sigset_t)))		return -EFAULT;	sigset_from_compat(&s, &s32);	sigdelsetmask(&s,sigmask(SIGKILL)|sigmask(SIGSTOP));	signotset(&s);	if (uts) {		if (get_compat_timespec (&t, uts))			return -EFAULT;		if (t.tv_nsec >= 1000000000L || t.tv_nsec < 0				|| t.tv_sec < 0)			return -EINVAL;	}	spin_lock_irq(&current->sighand->siglock);	sig = dequeue_signal(current, &s, &info);	if (!sig) {		timeout = MAX_SCHEDULE_TIMEOUT;		if (uts)			timeout = timespec_to_jiffies(&t)				+(t.tv_sec || t.tv_nsec);		if (timeout) {			current->real_blocked = current->blocked;			sigandsets(&current->blocked, &current->blocked, &s);			recalc_sigpending();			spin_unlock_irq(&current->sighand->siglock);			current->state = TASK_INTERRUPTIBLE;			timeout = schedule_timeout(timeout);			spin_lock_irq(&current->sighand->siglock);			sig = dequeue_signal(current, &s, &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_user32(uinfo, &info))				ret = -EFAULT;		}	}else {		ret = timeout?-EINTR:-EAGAIN;	}	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/75bcc8c5e1de78616b04ef9f317a293a7c1c163c/compat.c/clean/kernel/compat.c