[gobject-introspection] repository: Squash memory leak in _get_func and fix up style



commit 4c9424e18d71237f438a99bc5f2d45ae7de60b78
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Dec 12 16:14:57 2011 -0500

    repository: Squash memory leak in _get_func and fix up style

 girepository/giobjectinfo.c |   36 +++++++++++++++++++-----------------
 1 files changed, 19 insertions(+), 17 deletions(-)
---
diff --git a/girepository/giobjectinfo.c b/girepository/giobjectinfo.c
index fbf5d8a..4aca8bd 100644
--- a/girepository/giobjectinfo.c
+++ b/girepository/giobjectinfo.c
@@ -756,28 +756,30 @@ _get_func(GIObjectInfo *info,
   const char* symbol;
   GSList *parents = NULL, *l;
   GIObjectInfo *parent_info;
+  gpointer func = NULL;
 
   parent_info = info;
-  while (parent_info != NULL) {
-    parents = g_slist_prepend(parents, parent_info);
-    parent_info = g_object_info_get_parent(parent_info);
-  }
-
-  for (l = parents; l; l = l->next) {
-    GIObjectInfoRefFunction func;
-    parent_info = l->data;
-    symbol = getter(parent_info);
-    if (symbol == NULL)
-      continue;
-    if (g_typelib_symbol (((GIRealInfo *)parent_info)->typelib, symbol, (void**) &func)) {
-      g_slist_free(parents);
-      return func;
+  while (parent_info != NULL)
+    {
+      parents = g_slist_prepend (parents, parent_info);
+      parent_info = g_object_info_get_parent (parent_info);
     }
-  }
 
-  g_slist_free(parents);
-  return NULL;
+  for (l = parents; l; l = l->next)
+    {
+      GIObjectInfoRefFunction func;
+      parent_info = l->data;
+      symbol = getter (parent_info);
+      if (symbol == NULL)
+        continue;
+
+      g_typelib_symbol (((GIRealInfo *)parent_info)->typelib, symbol, (gpointer*) &func);
+      if (func)
+        break;
+    }
 
+  g_slist_free_full (parents, (GDestroyNotify) g_base_info_unref);
+  return func;
 }
 
 /**



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