summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/spice_timer_queue.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/server/spice_timer_queue.c b/server/spice_timer_queue.c
index d4578453..c4f2f6e6 100644
--- a/server/spice_timer_queue.c
+++ b/server/spice_timer_queue.c
@@ -261,8 +261,13 @@ void spice_timer_queue_cb(void)
if (timer->expiry_time > now_ms) {
break;
} else {
- timer->func(timer->opaque);
+ /* Remove active timer before calling the timer function.
+ * Timer function could delete the timer making the timer
+ * pointer point to freed data.
+ */
spice_timer_cancel(timer);
+ timer->func(timer->opaque);
+ /* timer could now be invalid ! */
}
}
}