xorg-x11-server/xserver-1.5.2-drain-console.patch

60 lines
1.8 KiB
Diff
Raw Normal View History

From 7a2f6c3d3b1ca39e87ecffd48fd87ab724990f52 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Fri, 31 Oct 2008 12:07:39 -0400
Subject: [PATCH] Drain the vt file descriptor.
Apparently putting it in raw mode makes the kernel think we really
really need the events from it, even if we open it write-only, and if we
don't drain input from it then eventually the kernel starts a wakeup
storm trying to enqueue keystrokes that'll never go anywhere. Just eat
the data and pretend everything's fine.
---
hw/xfree86/os-support/linux/lnx_init.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 6f68ba5..da5ca57 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -85,6 +85,14 @@ restoreVtPerms(void)
chown(vtname, vtPermSave[2], vtPermSave[3]);
}
+static void *console_handler;
+
+static void
+drain_console(int fd, void *closure)
+{
+ tcflush(fd, TCIOFLUSH);
+}
+
void
xf86OpenConsole(void)
{
@@ -300,6 +308,10 @@ xf86OpenConsole(void)
cfsetispeed(&nTty, 9600);
cfsetospeed(&nTty, 9600);
tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty);
+
+ /* need to keep the buffer clean, else the kernel gets angry */
+ console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
+ drain_console, NULL);
}
/* we really should have a InitOSInputDevices() function instead
@@ -346,6 +358,11 @@ xf86CloseConsole()
if (ShareVTs) return;
+ if (console_handler) {
+ xf86RemoveGeneralHandler(console_handler);
+ console_handler = NULL;
+ };
+
#if defined(DO_OS_FONTRESTORE)
if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0)
xf86Msg(X_WARNING, "xf86CloseConsole: VT_GETSTATE failed: %s\n",
--
1.6.0.3