Skip to content

Commit

Permalink
linux: Do not call FatalError from xf86CloseConsole
Browse files Browse the repository at this point in the history
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 2092f12)
  • Loading branch information
jwrdegoede authored and nwnk committed Oct 26, 2015
1 parent 0ca7900 commit 88f22fc
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions hw/xfree86/os-support/linux/lnx_init.c
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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");
}
}
}
Expand Down

0 comments on commit 88f22fc

Please sign in to comment.