[Spice-devel] [PATCH spice-server 14/20] Rearrange object destruction
Frediano Ziglio
fziglio at redhat.com
Thu Nov 24 17:39:01 UTC 2016
Try to arrange destruction in the opposite order of the creation
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
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);
}
--
2.9.3
More information about the Spice-devel
mailing list