[qxl] xspice: Don't create Xorg time in timer_add

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



SpiceCoreInterface::timer_add() is used by spice-server for integration
with external mainloops. timer_add() is only meant to create a disabled
timer, this timer will then be started with a call to timer_start().

The current implementation in Xspice creates a timer which will trigger
in a very long time, assuming this will never happen. This 'forever' is
1,000,000 seconds, which amounts to 11 days. After that time, some
timers which are meant to be disabled (eg migration related timers in
spice-server) fire, then causing a crash with some failed assertions.

Instead of creating the X timer right away in timer_add(), we can wait
until timer_start() is called before starting it, which avoids this
issue.
---
 src/spiceqxl_main_loop.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/spiceqxl_main_loop.c b/src/spiceqxl_main_loop.c
index ac9e43f..db89b6d 100644
--- a/src/spiceqxl_main_loop.c
+++ b/src/spiceqxl_main_loop.c
@@ -171,7 +171,6 @@ static SpiceTimer* timer_add(SpiceTimerFunc func, void *opaque)
 {
     SpiceTimer *timer = calloc(sizeof(SpiceTimer), 1);
 
-    timer->xorg_timer = TimerSet(NULL, 0, 1e9 /* TODO: infinity? */, xorg_timer_callback, timer);
     timer->func = func;
     timer->opaque = opaque;
     return timer;
@@ -179,7 +178,8 @@ static SpiceTimer* timer_add(SpiceTimerFunc func, void *opaque)
 
 static void timer_start(SpiceTimer *timer, uint32_t ms)
 {
-    TimerSet(timer->xorg_timer, 0 /* flags */, ms, xorg_timer_callback, timer);
+    timer->xorg_timer = TimerSet(timer->xorg_timer, 0 /* flags */,
+                                 ms, xorg_timer_callback, timer);
 }
 
 static void timer_cancel(SpiceTimer *timer)
-- 
2.5.5

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]