Try to arrange destruction in the opposite order of the creation Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/display-channel.c | 4 ++-- server/reds.c | 28 ++++++++++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/server/display-channel.c b/server/display-channel.c index 52f0a3d..cd1334d 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -77,10 +77,10 @@ display_channel_finalize(GObject *object) { DisplayChannel *self = DISPLAY_CHANNEL(object); - G_OBJECT_CLASS(display_channel_parent_class)->finalize(object); - g_array_unref(self->priv->video_codecs); g_free(self->priv); + + G_OBJECT_CLASS(display_channel_parent_class)->finalize(object); } static void drawable_draw(DisplayChannel *display, Drawable *drawable); diff --git a/server/reds.c b/server/reds.c index 05afb7c..701aed6 100644 --- a/server/reds.c +++ b/server/reds.c @@ -3593,27 +3593,31 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *reds, SpiceCoreInterface * SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds) { - g_array_unref(reds->config->renderers); - g_array_unref(reds->config->video_codecs); - free(reds->config); - if (reds->main_channel) { - red_channel_destroy(RED_CHANNEL(reds->main_channel)); - } - reds_cleanup(reds); - - if (reds->mig_timer) { - reds_core_timer_remove(reds, reds->mig_timer); - } - /* remove the server from the list of servers so that we don't attempt to * free it again at exit */ pthread_mutex_lock(&global_reds_lock); servers = g_list_remove(servers, reds); pthread_mutex_unlock(&global_reds_lock); + if (reds->inputs_channel) { + reds_unregister_channel(reds, RED_CHANNEL(reds->inputs_channel)); + red_channel_destroy(RED_CHANNEL(reds->inputs_channel)); + } + if (reds->main_channel) { + red_channel_destroy(RED_CHANNEL(reds->main_channel)); + } + if (reds->mig_timer) { + reds_core_timer_remove(reds, reds->mig_timer); + } + reds_cleanup(reds); #ifdef RED_STATISTICS stat_file_free(reds->stat_file); #endif + + g_array_unref(reds->config->renderers); + g_array_unref(reds->config->video_codecs); + free(reds->config); + free(reds); } -- git-series 0.9.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel