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 <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2017-01-19 17:20:19 +10:00
parent 3170b3519b
commit 11b37080df
2 changed files with 9 additions and 6 deletions

View 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

View 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 */
};