test: allow nesting of litest_push_event_frame()
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 19 Jan 2017 07:20:19 +0000 (17:20 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 26 Jan 2017 05:43:02 +0000 (15:43 +1000)
Right now, we fail if we call litest_push_event_frame() when already inside a
frame. For the semi-mt handling we need to do exactly that though, so turn it
into a counting semaphore instead.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
test/litest.c
test/litest.h

index 21afaf9..3bc58d9 100644 (file)
@@ -1384,6 +1384,8 @@ litest_delete_device(struct litest_device *d)
        if (!d)
                return;
 
+       litest_assert_int_eq(d->skip_ev_syn, 0);
+
        libinput_device_unref(d->libinput_device);
        libinput_path_remove_device(d->libinput_device);
        if (d->owns_context)
@@ -3042,16 +3044,17 @@ litest_timeout_trackpoint(void)
 void
 litest_push_event_frame(struct litest_device *dev)
 {
-       litest_assert(!dev->skip_ev_syn);
-       dev->skip_ev_syn = true;
+       litest_assert(dev->skip_ev_syn >= 0);
+       dev->skip_ev_syn++;
 }
 
 void
 litest_pop_event_frame(struct litest_device *dev)
 {
-       litest_assert(dev->skip_ev_syn);
-       dev->skip_ev_syn = false;
-       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_assert(dev->skip_ev_syn > 0);
+       dev->skip_ev_syn--;
+       if (dev->skip_ev_syn == 0)
+               litest_event(dev, EV_SYN, SYN_REPORT, 0);
 }
 
 static void
index 886337b..60757dc 100644 (file)
@@ -270,7 +270,7 @@ struct litest_device {
        struct litest_device_interface *interface;
 
        int ntouches_down;
-       bool skip_ev_syn;
+       int skip_ev_syn;
 
        void *private; /* device-specific data */
 };