diff options
author | Michal Srb <msrb@suse.com> | 2018-10-16 09:32:13 +0200 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2018-10-16 10:19:32 -0400 |
commit | ff91c696ff8f5f56da40e107cb5c321539758a81 (patch) | |
tree | 2542a11585547a2cc6d7ce69e450d8b735cc46d5 /hw/xfree86 | |
parent | 7c25439f0db4c20a4eab4ed44262eb396305f58a (diff) |
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.
Diffstat (limited to 'hw/xfree86')
-rw-r--r-- | hw/xfree86/os-support/linux/lnx_init.c | 16 |
1 files changed, 13 insertions, 3 deletions
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; } } |