[glib] gmain: free source_lists when freeing GMainContext



commit 48a9887eae1058b055994c832b26a8ab9876db57
Author: Dan Winship <danw gnome org>
Date:   Thu Aug 23 12:33:43 2012 -0400

    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

 glib/gmain.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
---
diff --git a/glib/gmain.c b/glib/gmain.c
index 603dd3f..4274269 100644
--- a/glib/gmain.c
+++ b/glib/gmain.c
@@ -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);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]