[PATCH libinput 2/2] evdev: ratelimit SYN_DROPPED logging
Peter Hutterer
peter.hutterer at who-t.net
Tue Nov 4 21:13:45 PST 2014
On Tue, Nov 04, 2014 at 09:35:38AM +0100, David Herrmann wrote:
> Use the ratelimit helpers for SYN_DROPPED logging. This guarantees that we
> will still receive SYN_DROPPED log-messages after multiple days of
> runtime, even though there might have been a SYN_DROPPED flood at one
> point in time.
>
> Signed-off-by: David Herrmann <dh.herrmann at gmail.com>
> ---
> src/evdev.c | 14 +++++++-------
> src/evdev.h | 4 +---
> 2 files changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 3aa87a7..836ce56 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -926,16 +926,14 @@ 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++;
> + if (ratelimit_test(&device->syn_drop_limit))
> 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);
> - }
> + else if (ratelimit_cutoff(&device->syn_drop_limit))
> + log_info(libinput, "SYN_DROPPED flood "
> + "for \"%s\"\n",
s/for/from/ I think.
> + device->devname);
>
> /* send one more sync event so we handle all
> currently pending events before we sync up
> @@ -1296,6 +1294,8 @@ evdev_device_create(struct libinput_seat *seat,
> device->scroll.threshold = 5.0; /* Default may be overridden */
> device->scroll.direction = 0;
> device->dpi = DEFAULT_MOUSE_DPI;
> + /* at most 5 SYN_DROPPED log-messages per 30s */
> + device->syn_drop_limit = RATELIMIT_INIT(30ULL * 1000 * 1000, 5);
for our use it'd be perfectly fine to have ratelimits defined in
ms rather than µs, would make this code nicer to look at.
Cheers,
Peter
> matrix_init_identity(&device->abs.calibration);
> matrix_init_identity(&device->abs.usermatrix);
> diff --git a/src/evdev.h b/src/evdev.h
> index 666c8dc..eefbb79 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -137,9 +137,7 @@ struct evdev_device {
> } buttons;
>
> int dpi; /* HW resolution */
> - /* The number of times libevdev processes a SYN_DROPPED, so we can
> - * stop logging them to avoid flooding the logs. */
> - int syn_drops_received;
> + struct ratelimit syn_drop_limit; /* ratelimit for SYN_DROPPED logging */
> };
>
> #define EVDEV_UNHANDLED_DEVICE ((struct evdev_device *) 1)
> --
> 2.1.3
>
More information about the wayland-devel
mailing list