Bug 557087 – mem leak in g_content_types_get_registered
authorChristian Persch <chpe@src.gnome.org>
Mon, 20 Oct 2008 16:49:16 +0000 (16:49 +0000)
committerChristian Persch <chpe@src.gnome.org>
Mon, 20 Oct 2008 16:49:16 +0000 (16:49 +0000)
svn path=/trunk/; revision=7616

ChangeLog
gio/gcontenttype.c

index bcd9fcf..ebe497c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-20 Christian Persch <chpe@gnome.org>
+
+       Bug 557087 – mem leak in g_content_types_get_registered
+               
+       * gio/gcontenttype.c: Plug a mem leak.
+
 2008-10-19  Michael Natterer  <mitch@imendio.com>
 
        Bug 556186 – gpoll.h breaks gmain.h inclusion
index 16fc184..f5e5599 100644 (file)
@@ -998,7 +998,7 @@ enumerate_mimetypes_subdir (const char *dir,
          if (g_str_has_suffix (ent->d_name, ".xml"))
            {
              mimetype = g_strdup_printf ("%s/%.*s", prefix, (int) strlen (ent->d_name) - 4, ent->d_name);
-             g_hash_table_insert (mimetypes, mimetype, NULL);
+             g_hash_table_replace (mimetypes, mimetype, NULL);
            }
        }
       closedir (d);
@@ -1053,7 +1053,7 @@ g_content_types_get_registered (void)
   int i;
   GList *l;
 
-  mimetypes = g_hash_table_new (g_str_hash, g_str_equal);
+  mimetypes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 
   enumerate_mimetypes_dir (g_get_user_data_dir (), mimetypes);
   dirs = g_get_system_data_dirs ();
@@ -1064,7 +1064,10 @@ g_content_types_get_registered (void)
   l = NULL;
   g_hash_table_iter_init (&iter, mimetypes);
   while (g_hash_table_iter_next (&iter, &key, NULL))
-    l = g_list_prepend (l, key);
+    {
+      l = g_list_prepend (l, key);
+      g_hash_table_iter_steal (&iter);
+    }
 
   g_hash_table_destroy (mimetypes);