Commit 1c6df7aa authored by Philip Withnall's avatar Philip Withnall

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
parent eaca8680
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment