From 3da6844c02f4041998ec655c19c7987e875adaf8 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 7 Feb 2019 20:23:14 +0100
Subject: Fixed extra GObjects leaks.

---
 plugins/elf/loading.c              |  2 +-
 src/analysis/contents/restricted.c |  2 +-
 src/analysis/disass/area.c         |  6 ++++--
 src/core/core.c                    | 11 +++++++++++
 src/glibext/configuration.c        | 13 ++++++-------
 5 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/plugins/elf/loading.c b/plugins/elf/loading.c
index 73e75f0..782b5c7 100644
--- a/plugins/elf/loading.c
+++ b/plugins/elf/loading.c
@@ -214,7 +214,7 @@ static void g_elf_loading_init(GElfLoading *loading)
 static void g_elf_loading_dispose(GElfLoading *loading)
 {
     if (loading->kind == 2)
-        g_object_unref(G_OBJECT(loading->content));
+        g_clear_object(&loading->content);
 
     G_OBJECT_CLASS(g_elf_loading_parent_class)->dispose(G_OBJECT(loading));
 
diff --git a/src/analysis/contents/restricted.c b/src/analysis/contents/restricted.c
index 1c0c8e6..8e5242e 100644
--- a/src/analysis/contents/restricted.c
+++ b/src/analysis/contents/restricted.c
@@ -213,7 +213,7 @@ static void g_restricted_content_interface_init(GBinContentInterface *iface)
 
 static void g_restricted_content_dispose(GRestrictedContent *content)
 {
-    g_object_unref(G_OBJECT(content->internal));
+    g_clear_object(&content->internal);
 
     G_OBJECT_CLASS(g_restricted_content_parent_class)->dispose(G_OBJECT(content));
 
diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c
index f1aa002..9649d6f 100644
--- a/src/analysis/disass/area.c
+++ b/src/analysis/disass/area.c
@@ -277,15 +277,17 @@ static void init_mem_area_from_addr(mem_area *area, const vmpa2t *addr, phys_t l
 
     area->format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
 
-    content = g_binary_format_get_content(area->format);
-
     area->proc = g_loaded_binary_get_processor(binary);
     area->endianness = g_arch_processor_get_endianness(area->proc);
 
     init_mrange(&area->range, addr, len);
 
+    content = g_binary_format_get_content(area->format);
+
     area->content = g_restricted_content_new(content, &area->range);
 
+    g_object_unref(G_OBJECT(content));
+
     switch (g_arch_processor_get_instruction_min_size(area->proc))
     {
         case MDS_4_BITS:
diff --git a/src/core/core.c b/src/core/core.c
index 5ce07d0..47e808d 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -131,12 +131,23 @@ bool load_all_basic_components(void)
 
 void unload_all_basic_components(void)
 {
+    GContentExplorer *explorer;             /* Explorateur de contenus     */
+    GContentResolver *resolver;             /* Résolveur de contenus       */
+
     unload_collection_definitions();
 
     unload_demanglers_definitions();
 
     unload_processors_definitions();
 
+    explorer = g_content_explorer_new();
+    set_current_content_explorer(NULL);
+    g_object_unref(G_OBJECT(explorer));
+
+    resolver = g_content_resolver_new();
+    set_current_content_resolver(NULL);
+    g_object_unref(G_OBJECT(resolver));
+
     exit_global_works();
 
     g_generic_config_write(get_main_configuration());
diff --git a/src/glibext/configuration.c b/src/glibext/configuration.c
index 0d3d011..03575b0 100644
--- a/src/glibext/configuration.c
+++ b/src/glibext/configuration.c
@@ -1146,14 +1146,13 @@ static void g_generic_config_init(GGenConfig *config)
 
 static void g_generic_config_dispose(GGenConfig *config)
 {
-    GList *iter;                            /* Boucle de parcours          */
+    g_list_free_full(config->groups, g_object_unref);
 
-    for (iter = g_list_first(config->params);
-         iter != NULL;
-         iter = g_list_next(iter))
-    {
-        g_object_unref(G_OBJECT(iter->data));
-    }
+    config->groups = NULL;
+
+    g_list_free_full(config->params, g_object_unref);
+
+    config->params = NULL;
 
     G_OBJECT_CLASS(g_generic_config_parent_class)->dispose(G_OBJECT(config));
 
-- 
cgit v0.11.2-87-g4458