From 4773ca9f2bf5d0c1e14f3c80af31950ca99c1064 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 21 May 2003 15:32:37 +0000 Subject: Create a second GPtrArray for the keys. We don't want to use 2003-05-20 Jeffrey Stedfast * camel-object.c (camel_object_bag_destroy): Create a second GPtrArray for the keys. We don't want to use bag->free_key() on the object. Fixes bug #43406. svn path=/trunk/; revision=21300 --- camel/ChangeLog | 6 ++++++ camel/camel-object.c | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index 219e0f4f05..4b65b48e04 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,9 @@ +2003-05-20 Jeffrey Stedfast + + * camel-object.c (camel_object_bag_destroy): Create a second + GPtrArray for the keys. We don't want to use bag->free_key() on + the object. Fixes bug #43406. + 2003-05-19 Jeffrey Stedfast * camel-folder-summary.c (camel_folder_summary_load): Only display diff --git a/camel/camel-object.c b/camel/camel-object.c index b96e54675d..7130493864 100644 --- a/camel/camel-object.c +++ b/camel/camel-object.c @@ -1107,19 +1107,29 @@ save_object(void *key, CamelObject *o, GPtrArray *objects) g_ptr_array_add(objects, o); } +static void +save_key(void *key, CamelObject *o, GPtrArray *keys) +{ + g_ptr_array_add (keys, key); +} + void camel_object_bag_destroy(CamelObjectBag *bag) { - int i; GPtrArray *objects = g_ptr_array_new(); + GPtrArray *keys = g_ptr_array_new (); + int i; sem_getvalue(&bag->reserve_sem, &i); g_assert(i == 1); g_hash_table_foreach(bag->object_table, (GHFunc)save_object, objects); + g_hash_table_foreach(bag->object_table, (GHFunc)save_key, keys); for (i=0;ilen;i++) { camel_object_bag_remove(bag, objects->pdata[i]); - bag->free_key(objects->pdata[i]); + bag->free_key (keys->pdata[i]); } + + g_ptr_array_free (keys, TRUE); g_ptr_array_free(objects, TRUE); g_hash_table_destroy(bag->object_table); g_hash_table_destroy(bag->key_table); -- cgit v1.2.3