From 8925ff6d9870ccaab0feeb4f9af6e1f075d313ef Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Sun, 16 Feb 2003 13:19:49 +0000 Subject: 2003-02-16 Alexander Larsson * dbus/dbus-hash.c (_dbus_hash_table_unref): Actually free keys and values when destroying hashtable. --- dbus/dbus-hash.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'dbus/dbus-hash.c') diff --git a/dbus/dbus-hash.c b/dbus/dbus-hash.c index 8bac61a8..d7791d2a 100644 --- a/dbus/dbus-hash.c +++ b/dbus/dbus-hash.c @@ -236,6 +236,8 @@ static void remove_entry (DBusHashTable *table, DBusHashEntry *entry); static void free_entry (DBusHashTable *table, DBusHashEntry *entry); +static void free_entry_data (DBusHashTable *table, + DBusHashEntry *entry); /** @} */ @@ -371,6 +373,20 @@ _dbus_hash_table_unref (DBusHashTable *table) } } #else + DBusHashEntry *entry; + int i; + + /* Free the entries in the table. */ + for (i = 0; i < table->n_buckets; i++) + { + entry = table->buckets[i]; + while (entry != NULL) + { + free_entry_data (table, entry); + + entry = entry->next; + } + } /* We can do this very quickly with memory pools ;-) */ _dbus_mem_pool_free (table->entry_pool); #endif @@ -394,14 +410,20 @@ alloc_entry (DBusHashTable *table) } static void -free_entry (DBusHashTable *table, - DBusHashEntry *entry) +free_entry_data (DBusHashTable *table, + DBusHashEntry *entry) { if (table->free_key_function) (* table->free_key_function) (entry->key); if (table->free_value_function) (* table->free_value_function) (entry->value); - +} + +static void +free_entry (DBusHashTable *table, + DBusHashEntry *entry) +{ + free_entry_data (table, entry); _dbus_mem_pool_dealloc (table->entry_pool, entry); } -- cgit