From ff91c696ff8f5f56da40e107cb5c321539758a81 Mon Sep 17 00:00:00 2001 From: Michal Srb Date: Tue, 16 Oct 2018 09:32:13 +0200 Subject: xfree86: Only switch to original VT if it is active. If the X server is terminated while its VT is not active, it should not change the current VT. v2: Query current state in xf86CloseConsole using VT_GETSTATE instead of keeping track in xf86VTEnter/xf86VTLeave/etc. --- hw/xfree86/os-support/linux/lnx_init.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'hw/xfree86/os-support/linux/lnx_init.c') diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c index 039dc4a4d..358d89f0f 100644 --- a/hw/xfree86/os-support/linux/lnx_init.c +++ b/hw/xfree86/os-support/linux/lnx_init.c @@ -299,6 +299,7 @@ void xf86CloseConsole(void) { struct vt_mode VT; + struct vt_stat vts; int ret; if (xf86Info.ShareVTs) { @@ -336,10 +337,19 @@ xf86CloseConsole(void) if (xf86Info.autoVTSwitch) { /* - * Perform a switch back to the active VT when we were started - */ + * Perform a switch back to the active VT when we were started if our + * vt is active now. + */ if (activeVT >= 0) { - switch_to(activeVT, "xf86CloseConsole"); + SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts)); + if (ret < 0) { + xf86Msg(X_WARNING, "xf86OpenConsole: VT_GETSTATE failed: %s\n", + strerror(errno)); + } else { + if (vts.v_active == xf86Info.vtno) { + switch_to(activeVT, "xf86CloseConsole"); + } + } activeVT = -1; } } -- cgit v1.2.3