aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-07 19:02:55 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-07 19:02:55 -0400
commit70cb97935b8859f27296772885104b599f560576 (patch)
tree089c5c2098888492c8d54c2d0c52772a64db8423
parentfc8b28a65d81a6fdf58ef81ce5b8ac7a35304e68 (diff)
VT_WAITACTIVE: Avoid returning EINTR when not necessary
We should generally prefer to return ERESTARTNOHAND rather than EINTR, so that processes with unhandled signals that get ignored don't return EINTR. This can help with X startup issues: Fatal server error: xf86OpenConsole: VT_WAITACTIVE failed: Interrupted system call although the real fix is having the X server always retry EINTR regardless (since EINTR does happen for signals that have handlers installed). Keithp has a patch for that. Regardless, ERESTARTNOHAND is the correct thing to use. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/char/vt_ioctl.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
index c799b7f7bbb3..7a61a2a9aafe 100644
--- a/drivers/char/vt_ioctl.c
+++ b/drivers/char/vt_ioctl.c
@@ -1032,7 +1032,7 @@ static DECLARE_WAIT_QUEUE_HEAD(vt_activate_queue);
1032 1032
1033/* 1033/*
1034 * Sleeps until a vt is activated, or the task is interrupted. Returns 1034 * Sleeps until a vt is activated, or the task is interrupted. Returns
1035 * 0 if activation, -EINTR if interrupted. 1035 * 0 if activation, -EINTR if interrupted by a signal handler.
1036 */ 1036 */
1037int vt_waitactive(int vt) 1037int vt_waitactive(int vt)
1038{ 1038{
@@ -1057,7 +1057,7 @@ int vt_waitactive(int vt)
1057 break; 1057 break;
1058 } 1058 }
1059 release_console_sem(); 1059 release_console_sem();
1060 retval = -EINTR; 1060 retval = -ERESTARTNOHAND;
1061 if (signal_pending(current)) 1061 if (signal_pending(current))
1062 break; 1062 break;
1063 schedule(); 1063 schedule();