From a5a0d4a290a7fdea731fbfd8c7d44f3a0709bd6c Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Mon, 18 Jan 2016 23:02:44 +0000 Subject: [PATCH] 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 Acked-by: Jonathon Jongsma --- server/tests/test-loop.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/server/tests/test-loop.c b/server/tests/test-loop.c index 1dc3923c..1c2f496a 100644 --- a/server/tests/test-loop.c +++ b/server/tests/test-loop.c @@ -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);