From cef6abff8e58b597d6ba751999d5ce9989e71b78 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Mon, 20 Oct 2008 16:49:16 +0000 Subject: [PATCH] =?utf8?q?Bug=20557087=20=E2=80=93=20mem=20leak=20in=20g?= =?utf8?q?=5Fcontent=5Ftypes=5Fget=5Fregistered?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=7616 --- ChangeLog | 6 ++++++ gio/gcontenttype.c | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bcd9fcf..ebe497c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-10-20 Christian Persch + + Bug 557087 – mem leak in g_content_types_get_registered + + * gio/gcontenttype.c: Plug a mem leak. + 2008-10-19 Michael Natterer Bug 556186 – gpoll.h breaks gmain.h inclusion diff --git a/gio/gcontenttype.c b/gio/gcontenttype.c index 16fc184..f5e5599 100644 --- a/gio/gcontenttype.c +++ b/gio/gcontenttype.c @@ -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); -- 2.7.4