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 <derekf@osg.samsung.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Derek Foreman 2014-10-29 09:56:27 -05:00 committed by Peter Hutterer
parent 2cef5a26cd
commit 84d59fe8e6
2 changed files with 15 additions and 0 deletions

View file

@ -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 */

View file

@ -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)