[PATCH v2 libinput 1/2] evdev: Ensure the libevdev object receives the new fd on resume
Hans de Goede
hdegoede at redhat.com
Fri Dec 12 04:19:05 PST 2014
Hi,
On 10-12-14 02:47, Peter Hutterer wrote:
> From: Carlos Garnacho <carlosg at gnome.org>
>
> Otherwise, input_events will be attempted to read from the wrong place,
> which also leaves the right/current fd with pending data to be read,
> making the epoll fd wake up constantly.
>
> Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
> Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Series looks good and is:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> Changes to v1:
> - sync libevdev's state after change_fd
>
> src/evdev.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 0873c99..3f15560 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1985,6 +1985,8 @@ evdev_device_resume(struct evdev_device *device)
> struct libinput *libinput = device->base.seat->libinput;
> int fd;
> const char *devnode;
> + struct input_event ev;
> + enum libevdev_read_status status;
>
> if (device->fd != -1)
> return 0;
> @@ -2011,6 +2013,20 @@ evdev_device_resume(struct evdev_device *device)
> return -ENODEV;
> }
>
> + libevdev_change_fd(device->evdev, fd);
> + libevdev_set_clock_id(device->evdev, CLOCK_MONOTONIC);
> +
> + /* re-sync libevdev's view of the device, but discard the actual
> + events. Our device is in a neutral state already */
> + libevdev_next_event(device->evdev,
> + LIBEVDEV_READ_FLAG_FORCE_SYNC,
> + &ev);
> + do {
> + status = libevdev_next_event(device->evdev,
> + LIBEVDEV_READ_FLAG_SYNC,
> + &ev);
> + } while (status == LIBEVDEV_READ_STATUS_SYNC);
> +
> device->source =
> libinput_add_fd(libinput, fd, evdev_device_dispatch, device);
> if (!device->source) {
>
More information about the wayland-devel
mailing list