--- 2.6/fs/select.c 2007-05-20 09:52:32.000000000 +0200 +++ build-2.6/fs/select.c 2007-07-23 22:10:21.000000000 +0200 @@ -723,7 +723,7 @@ } err = fdcount; if (!fdcount && signal_pending(current)) - err = -EINTR; + err = -ERESTARTNOHAND; out_fds: walk = head; while(walk!=NULL) { @@ -794,7 +794,7 @@ ret = do_sys_poll(ufds, nfds, &timeout); /* We can restart this syscall, usually */ - if (ret == -EINTR) { + if (ret == -ERESTARTNOHAND) { /* * Don't restore the signal mask yet. Let do_signal() deliver * the signal on the way back to userspace, before the signal @@ -805,7 +805,6 @@ sizeof(sigsaved)); set_thread_flag(TIF_RESTORE_SIGMASK); } - ret = -ERESTARTNOHAND; } else if (sigmask) sigprocmask(SIG_SETMASK, &sigsaved, NULL);