Drain XRecord connection of any events after handling replies

If the X server sends an event to the XRecord connection the event
will never be handled. This will cause the event queue to fill up in
Xlib and lead to syndaemon running away at 100% cpu usage.

This change drains any events from the connection. It's not a fix for
the underlying bug in the server or Xlib, but it does paper over the
issue for now.

https://bugs.launchpad.net/bugs/754470
http://bugs.freedesktop.org/show_bug.cgi?id=31921

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit bdc9c7cf97)
This commit is contained in:
Chase Douglas
2011-04-15 15:29:57 -04:00
committed by Peter Hutterer
parent ae226ae5c9
commit 27d04237d6

View File

@@ -421,6 +421,14 @@ void record_main_loop(Display* display, double idle_time) {
XRecordProcessReplies(dpy_data);
/* If there are any events left over, they are in error. Drain them
* from the connection queue so we don't get stuck. */
while (XEventsQueued(dpy_data, QueuedAlready) > 0) {
XEvent event;
XNextEvent(dpy_data, &event);
fprintf(stderr, "bad event received, major opcode %d\n", event.type);
}
if (!ignore_modifier_keys && cbres.key_event) {
disable_event = 1;
}