[PATCH] linux: Don't lose console events on non-evdev drivers (#29969)

Peter Hutterer peter.hutterer at who-t.net
Sun Sep 5 18:52:51 PDT 2010


From: Thomas Hellstrom <thellstrom at vmware.com>

The drain_console() function will race with new keyboard events being added
by the hardware causing the server to lose keyboard events if the console fd
is used for input.

Only use the drain_console() when AllowEmptyInput is off which is the best
indicator we have for whether the keyboard driver will be used. This patch
will only fix the bug when hotplugging is disabled.
What we really need is a way to figure out either whether we're _not_ using
the keyboard driver (not predictable) or a way for the keyboard driver to
disable drain_console().

X.Org Bug 29969 <http://bugs.freedesktop.org/show_bug.cgi?id=29969>

Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Thomas, I only added some comments to the commit message. Patch is good for
the stable servers, though for master I think we might need something better
integrated (see follow-up patch).

 hw/xfree86/os-support/linux/lnx_init.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index c8cec2e..92bfde4 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -277,8 +277,9 @@ xf86OpenConsole(void)
             tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty);
 
             /* need to keep the buffer clean, else the kernel gets angry */
-            console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
-                    drain_console, NULL);
+	    if (xf86Info.allowEmptyInput)
+		console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
+							drain_console, NULL);
 
 	    /* we really should have a InitOSInputDevices() function instead
 	     * of Init?$#*&Device(). So I just place it here */
-- 
1.7.2.2



More information about the xorg-devel mailing list