gmain: free source_lists when freeing GMainContext

If a context was freed with sources still attached, those sources
correctly got destroyed, but the corresponding GSourceList structs
were being leaked.

https://bugzilla.gnome.org/show_bug.cgi?id=682560
This commit is contained in:
Dan Winship 2012-08-23 12:33:43 -04:00
parent b901aaf673
commit 48a9887eae

View File

@ -499,6 +499,8 @@ g_main_context_unref (GMainContext *context)
{
GSourceIter iter;
GSource *source;
GList *sl_iter;
GSourceList *list;
g_return_if_fail (context != NULL);
g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);
@ -516,6 +518,12 @@ g_main_context_unref (GMainContext *context)
source->context = NULL;
g_source_destroy_internal (source, context, FALSE);
}
for (sl_iter = context->source_lists; sl_iter; sl_iter = sl_iter->next)
{
list = sl_iter->data;
g_slice_free (GSourceList, list);
}
g_list_free (context->source_lists);
g_mutex_clear (&context->mutex);