From: Philip Withnall Date: Thu, 25 Sep 2014 08:51:25 +0000 (+0100) Subject: gmain: Unref child sources when finalising a GSource X-Git-Tag: 2.43.0~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1c6df7aaeb52672c7a63517c4df271db7727b8be;p=platform%2Fupstream%2Fglib.git gmain: Unref child sources when finalising a GSource If a GSource is created, *not* attached to a GMainContext, and then has child sources added, dropping the last reference to the parent GSource will leak its references to its child sources. Currently, child sources are only unreffed when g_source_destroy() is called on the parent. https://bugzilla.gnome.org/show_bug.cgi?id=737338 --- diff --git a/glib/gmain.c b/glib/gmain.c index 71c816b..47e7749 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -2026,6 +2026,17 @@ g_source_unref_internal (GSource *source, g_slist_free_full (source->priv->fds, g_free); + while (source->priv->child_sources) + { + GSource *child_source = source->priv->child_sources->data; + + source->priv->child_sources = + g_slist_remove (source->priv->child_sources, child_source); + child_source->priv->parent_source = NULL; + + g_source_unref_internal (child_source, context, have_lock); + } + g_slice_free (GSourcePrivate, source->priv); source->priv = NULL;