From: Egbert Eich Date: Sat May 24 02:02:32 2014 +0200 Subject: [PATCH]CloseConsole: Don't report FatalError() when shutting down Patch-mainline: to be upstreamed Git-commit: 4edf1fd15b9d2746f1f83165ab45efbe35af8de8 Git-repo: References: bnc#879666, bnc#879489 Signed-off-by: Egbert Eich When encountering a problem while closing the console, don't report this as a FatalError(). FatalError() will terminate the Xserver - no use calling it when terminating anyway. Since FatalError() will call CloseConsole() we would only come here again. Signed-off-by: Egbert Eich --- hw/xfree86/os-support/linux/lnx_init.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c index bcb039f..c46bca9 100644 --- a/hw/xfree86/os-support/linux/lnx_init.c +++ b/hw/xfree86/os-support/linux/lnx_init.c @@ -63,17 +63,24 @@ drain_console(int fd, void *closure) } static void -switch_to(int vt, const char *from) +switch_to(int vt, const char *from, Bool fatal) { 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) { + if (fatal) + FatalError("%s: VT_ACTIVATE failed: %s\n", from, strerror(errno)); + else + xf86Msg(X_WARNING, "%s: VT_ACTIVATE failed: %s\n", from, strerror(errno)); + } SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_WAITACTIVE, vt)); - if (ret < 0) - FatalError("%s: VT_WAITACTIVE failed: %s\n", from, strerror(errno)); + if (ret < 0) { + if (fatal) + FatalError("%s: VT_WAITACTIVE failed: %s\n", from, strerror(errno)); + else + xf86Msg(X_WARNING, "%s: VT_WAITACTIVE failed: %s\n", from, strerror(errno)); + } } void @@ -194,7 +201,7 @@ xf86OpenConsole(void) /* * now get the VT. This _must_ succeed, or else fail completely. */ - switch_to(xf86Info.vtno, "xf86OpenConsole"); + switch_to(xf86Info.vtno, "xf86OpenConsole", TRUE); SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETMODE, &VT)); if (ret < 0) @@ -255,7 +262,7 @@ xf86OpenConsole(void) else { /* serverGeneration != 1 */ if (!xf86Info.ShareVTs && xf86Info.autoVTSwitch) { /* now get the VT */ - switch_to(xf86Info.vtno, "xf86OpenConsole"); + switch_to(xf86Info.vtno, "xf86OpenConsole", TRUE); } } } @@ -305,7 +312,7 @@ xf86CloseConsole(void) * Perform a switch back to the active VT when we were started */ if (activeVT >= 0) { - switch_to(activeVT, "xf86CloseConsole"); + switch_to(activeVT, "xf86CloseConsole", FALSE); activeVT = -1; } }