[PATCH xf86-input-synaptics] Drain XRecord connection of any events after handling replies
Peter Hutterer
peter.hutterer at who-t.net
Sun Apr 17 21:01:44 PDT 2011
On Fri, Apr 15, 2011 at 03:29:57PM -0400, Chase Douglas wrote:
> 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 at canonical.com>
> ---
> I'm offering this up as a work around for whatever real bug exists. It
> probably should not be committed upstream though.
>
> tools/syndaemon.c | 8 ++++++++
> 1 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/tools/syndaemon.c b/tools/syndaemon.c
> index 0309fb5..1c799c6 100644
> --- a/tools/syndaemon.c
> +++ b/tools/syndaemon.c
> @@ -415,6 +415,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;
> }
> --
> 1.7.4.1
fair call, though I'd appreciate it if you could figure out why the events
are sent on the record connection (and if that is indeed a bug or just
unhandled behaviour on the syndaemon side).
pushed, thank you.
Cheers,
Peter
More information about the xorg-devel
mailing list