summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2011-04-15 15:29:57 -0400
committerPeter Hutterer <peter.hutterer@who-t.net>2011-04-18 13:58:03 +1000
commitbdc9c7cf9767bda77c690cb4211f6f6cb4567748 (patch)
tree798109481218c6eac60c39ad9575c895d28bc89c
parentfe05c60fee1f8fc24cc6cc2af7027d897607af2a (diff)
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>
-rw-r--r--tools/syndaemon.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/syndaemon.c b/tools/syndaemon.c
index 9779935..47e0e6a 100644
--- a/tools/syndaemon.c
+++ b/tools/syndaemon.c
@@ -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;
}