[PATCH libinput] test: add an extra loop for slow udev initialization
Hans de Goede
hdegoede at redhat.com
Tue May 26 07:02:56 PDT 2015
Hi,
On 05/26/2015 04:56 AM, Peter Hutterer wrote:
> On slower machines, e.g. VMs, udev isn't fast enough to get the properties set
> up by the time we're trying to get the device going. This fails when we try to
> add the device with libinput_path_add_device().
>
> We know that all litest devices will have ID_INPUT set, so check for that
> before we continue.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> If anyone has any better ideas here, I'm all ears.
I'm afraid I don't have any better idea for this either:
LGTM: Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
>
> test/litest.c | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/test/litest.c b/test/litest.c
> index fbbdaeb..d9cf452 100644
> --- a/test/litest.c
> +++ b/test/litest.c
> @@ -985,6 +985,32 @@ litest_restore_log_handler(struct libinput *libinput)
> libinput_log_set_handler(libinput, litest_log_handler);
> }
>
> +static inline void
> +litest_wait_for_udev(int fd)
> +{
> + struct udev *udev;
> + struct udev_device *device;
> + struct stat st;
> + int loop_count = 0;
> +
> + litest_assert_int_ge(fstat(fd, &st), 0);
> +
> + udev = udev_new();
> + device = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
> + litest_assert_ptr_notnull(device);
> + while (device && !udev_device_get_property_value(device, "ID_INPUT")) {
> + loop_count++;
> + litest_assert_int_lt(loop_count, 300);
> +
> + udev_device_unref(device);
> + msleep(2);
> + device = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
> + }
> +
> + udev_device_unref(device);
> + udev_unref(udev);
> +}
> +
> struct litest_device *
> litest_add_device_with_overrides(struct libinput *libinput,
> enum litest_device_type which,
> @@ -1012,6 +1038,8 @@ litest_add_device_with_overrides(struct libinput *libinput,
> rc = libevdev_new_from_fd(fd, &d->evdev);
> litest_assert_int_eq(rc, 0);
>
> + litest_wait_for_udev(fd);
> +
> d->libinput = libinput;
> d->libinput_device = libinput_path_add_device(d->libinput, path);
> litest_assert(d->libinput_device != NULL);
>
More information about the wayland-devel
mailing list