dfe451eac3
- xserver-1.5.2-drain-console.patch: Silently eat any input we get from the tty fd, lest terrible wakeup storms ensue.
60 lines
1.8 KiB
Diff
60 lines
1.8 KiB
Diff
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
|
|
|