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.herrm...@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
> 
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to