linux: Do not call FatalError from xf86CloseConsole
FatalError ends up calling xf86CloseConsole itself, so calling FatalError
from within xf86CloseConsole is not a good idea.
Make switch_to log errors using xf86Msg(X_WARNING, ...) and return success
(or failure).
This makes switch_to match the other error checking done in xf86CloseConsole
which all logs warnings and continues.
Add checking of the return value in xf86OpenConsole and call
FatalError there when switch_to fails, to preserve the error-handling
behavior of xf86OpenConsole.
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1269210
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
(cherry picked from commit 2092f12a24
)
This commit is contained in:
parent
0ca79007c9
commit
88f22fc5da
|
@ -62,18 +62,24 @@ drain_console(int fd, void *closure)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
switch_to(int vt, const char *from)
|
||||
{
|
||||
int ret;
|
||||
|
||||
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_ACTIVATE, vt));
|
||||
if (ret < 0)
|
||||
FatalError("%s: VT_ACTIVATE failed: %s\n", from, strerror(errno));
|
||||
if (ret < 0) {
|
||||
xf86Msg(X_WARNING, "%s: VT_ACTIVATE failed: %s\n", from, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_WAITACTIVE, vt));
|
||||
if (ret < 0)
|
||||
FatalError("%s: VT_WAITACTIVE failed: %s\n", from, strerror(errno));
|
||||
if (ret < 0) {
|
||||
xf86Msg(X_WARNING, "%s: VT_WAITACTIVE failed: %s\n", from, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
|
@ -208,7 +214,8 @@ xf86OpenConsole(void)
|
|||
/*
|
||||
* now get the VT. This _must_ succeed, or else fail completely.
|
||||
*/
|
||||
switch_to(xf86Info.vtno, "xf86OpenConsole");
|
||||
if (!switch_to(xf86Info.vtno, "xf86OpenConsole"))
|
||||
FatalError("xf86OpenConsole: Switching VT failed\n");
|
||||
|
||||
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETMODE, &VT));
|
||||
if (ret < 0)
|
||||
|
@ -269,7 +276,8 @@ xf86OpenConsole(void)
|
|||
else { /* serverGeneration != 1 */
|
||||
if (!xf86Info.ShareVTs && xf86Info.autoVTSwitch) {
|
||||
/* now get the VT */
|
||||
switch_to(xf86Info.vtno, "xf86OpenConsole");
|
||||
if (!switch_to(xf86Info.vtno, "xf86OpenConsole"))
|
||||
FatalError("xf86OpenConsole: Switching VT failed\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue