tests: test removed triggered timers are not called

This could happen for instance if a given timer remove all clients
which have associated timers.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
Frediano Ziglio 2016-01-18 23:02:44 +00:00
parent 323dc46794
commit a5a0d4a290

View File

@ -74,6 +74,19 @@ static void *loop_func(void *arg)
return NULL;
}
static SpiceTimer *twice_timers[2] = { NULL, NULL };
static int twice_called = 0;
static void timer_not_twice(void *opaque)
{
spice_assert(++twice_called == 1);
/* delete timers, should not have another call */
core->timer_remove(twice_timers[0]);
core->timer_remove(twice_timers[1]);
twice_timers[0] = NULL;
twice_timers[1] = NULL;
}
int main(int argc, char **argv)
{
SpiceTimer *timer, *timers[10];
@ -107,6 +120,14 @@ int main(int argc, char **argv)
timer = timers[i++] = core->timer_add(timer_exit, NULL);
core->timer_start(timer, 10);
/* test events are not called when freed */
timer = twice_timers[0] = core->timer_add(timer_not_twice, NULL);
spice_assert(timer != NULL);
core->timer_start(timer, 2);
timer = twice_timers[1] = core->timer_add(timer_not_twice, NULL);
spice_assert(timer != NULL);
core->timer_start(timer, 2);
/* run the loop */
loop = g_main_loop_new(basic_event_loop_get_context(), FALSE);
alarm(1);