However, it still crashes, most likely due to the xorg_timer in the watch structure. Those timers become invalid at Xorg server reset (it clears all timers), but we go on to continue to use them. As fixing this fully will likely require some messy rework, simply documenting -noreset seems like the best choice for now. Signed-off-by: Jeremy White<jwhite@xxxxxxxxxxxxxxx> --- src/qxl_driver.c | 14 +++++++++++++- src/spiceqxl_main_loop.c | 6 +++++- src/spiceqxl_main_loop.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/qxl_driver.c b/src/qxl_driver.c index f847c12..a0d3da8 100644 --- a/src/qxl_driver.c +++ b/src/qxl_driver.c @@ -637,10 +637,22 @@ spiceqxl_screen_init (ScrnInfoPtr pScrn, qxl_screen_t *qxl) spice_server_init (qxl->spice_server, qxl->core); qxl_add_spice_display_interface (qxl); qxl_add_spice_playback_interface (qxl); + } + else + { + /* Crashes result from invalid xorg_timer pointers in + our watch lists because Xorg clears all timers at server reset. + We would require a fairly substantial revamp of how the + spice server is started and operated to avoid this crash. */ + ErrorF("WARNING: XSPICE requires -noreset; crashes are now likely.\n"); + } + + if (! qxl->worker_running) + { + xspice_register_handlers(); qxl->worker->start (qxl->worker); qxl->worker_running = TRUE; } - qxl->spice_server = qxl->spice_server; } #endif diff --git a/src/spiceqxl_main_loop.c b/src/spiceqxl_main_loop.c index e57fb91..a8a67de 100644 --- a/src/spiceqxl_main_loop.c +++ b/src/spiceqxl_main_loop.c @@ -352,6 +352,10 @@ SpiceCoreInterface *basic_event_loop_init(void) core.watch_update_mask = watch_update_mask; core.watch_remove = watch_remove; core.channel_event = channel_event; - RegisterBlockAndWakeupHandlers(xspice_block_handler, xspice_wakeup_handler, 0); return&core; } + +void xspice_register_handlers(void) +{ + RegisterBlockAndWakeupHandlers(xspice_block_handler, xspice_wakeup_handler, 0); +} diff --git a/src/spiceqxl_main_loop.h b/src/spiceqxl_main_loop.h index 4cd5073..0e284ba 100644 --- a/src/spiceqxl_main_loop.h +++ b/src/spiceqxl_main_loop.h @@ -28,5 +28,6 @@ SpiceCoreInterface *basic_event_loop_init(void); void basic_event_loop_mainloop(void); +void xspice_register_handlers(void); #endif // QXL_MAIN_LOOP_H -- 1.7.10.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel