From 84d59fe8e61c3b5f1f17500b16fdd54e402a7015 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Wed, 29 Oct 2014 09:56:27 -0500 Subject: [PATCH] evdev: Log evdev event queue overflows Log a message when the kernel event queue overflows and events are dropped. After 10 messages logging stops to avoid flooding the logs if the condition is persistent. Signed-off-by: Derek Foreman Signed-off-by: Peter Hutterer --- src/evdev.c | 11 +++++++++++ src/evdev.h | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index dd2228bf..e5e7bfdd 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -924,6 +924,17 @@ evdev_device_dispatch(void *data) rc = libevdev_next_event(device->evdev, LIBEVDEV_READ_FLAG_NORMAL, &ev); if (rc == LIBEVDEV_READ_STATUS_SYNC) { + if (device->syn_drops_received < 10) { + device->syn_drops_received++; + log_info(libinput, "SYN_DROPPED event from " + "\"%s\" - some input events have " + "been lost.\n", device->devname); + if (device->syn_drops_received == 10) + log_info(libinput, "No longer logging " + "SYN_DROPPED events for " + "\"%s\"\n", device->devname); + } + /* send one more sync event so we handle all currently pending events before we sync up to the current state */ diff --git a/src/evdev.h b/src/evdev.h index c0d65771..9e846238 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -135,6 +135,10 @@ struct evdev_device { /* Checks if buttons are down and commits the setting */ void (*change_to_left_handed)(struct evdev_device *device); } buttons; + + /* The number of times libevdev processes a SYN_DROPPED, so we can + * stop logging them to avoid flooding the logs. */ + int syn_drops_received; }; #define EVDEV_UNHANDLED_DEVICE ((struct evdev_device *) 1) -- 2.34.1