提交 70cb9793 编写于 作者: L Linus Torvalds

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: NLinus Torvalds <torvalds@linux-foundation.org>
上级 fc8b28a6
...@@ -1032,7 +1032,7 @@ static DECLARE_WAIT_QUEUE_HEAD(vt_activate_queue); ...@@ -1032,7 +1032,7 @@ static DECLARE_WAIT_QUEUE_HEAD(vt_activate_queue);
/* /*
* Sleeps until a vt is activated, or the task is interrupted. Returns * Sleeps until a vt is activated, or the task is interrupted. Returns
* 0 if activation, -EINTR if interrupted. * 0 if activation, -EINTR if interrupted by a signal handler.
*/ */
int vt_waitactive(int vt) int vt_waitactive(int vt)
{ {
...@@ -1057,7 +1057,7 @@ int vt_waitactive(int vt) ...@@ -1057,7 +1057,7 @@ int vt_waitactive(int vt)
break; break;
} }
release_console_sem(); release_console_sem();
retval = -EINTR; retval = -ERESTARTNOHAND;
if (signal_pending(current)) if (signal_pending(current))
break; break;
schedule(); schedule();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册