diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index ca8e797..d514e2f 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -19,7 +19,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.5.2 -Release: 11%{?dist} +Release: 12%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -97,6 +97,7 @@ Patch6011: xserver-1.5.2-exa-sync-less.patch # Bug 434807 Patch6012: xserver-1.5.2-more-sanity-checks.patch +Patch6013: xserver-1.5.2-drain-console.patch %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri @@ -528,6 +529,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Fri Oct 31 2008 Adam Jackson 1.5.2-12 +- xserver-1.5.2-drain-console.patch: Silently eat any input we get from the + tty fd, lest terrible wakeup storms ensue. + * Tue Oct 28 2008 Adam Jackson 1.5.2-11 - Un-require mouse and keyboard, we're an evdev shop now - Drop some obsoletes from the F7 timeframe diff --git a/xserver-1.5.2-drain-console.patch b/xserver-1.5.2-drain-console.patch new file mode 100644 index 0000000..faad529 --- /dev/null +++ b/xserver-1.5.2-drain-console.patch @@ -0,0 +1,59 @@ +From 7a2f6c3d3b1ca39e87ecffd48fd87ab724990f52 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +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 +