From 11b37080df0f197991cbb9646b3fc78655f5a8a1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 19 Jan 2017 17:20:19 +1000 Subject: [PATCH] test: allow nesting of litest_push_event_frame() 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 --- test/litest.c | 13 ++++++++----- test/litest.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/test/litest.c b/test/litest.c index 21afaf9b..3bc58d99 100644 --- a/test/litest.c +++ b/test/litest.c @@ -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 diff --git a/test/litest.h b/test/litest.h index 886337ba..60757dc5 100644 --- a/test/litest.h +++ b/test/litest.h @@ -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 */ };