diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c index 6f68ba57c..da5ca57cc 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",