]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
2003-02-16 Alexander Larsson <alexl@redhat.com>
authorAlexander Larsson <alexl@redhat.com>
Sun, 16 Feb 2003 13:19:49 +0000 (13:19 +0000)
committerAlexander Larsson <alexl@redhat.com>
Sun, 16 Feb 2003 13:19:49 +0000 (13:19 +0000)
* dbus/dbus-hash.c (_dbus_hash_table_unref):
Actually free keys and values when destroying hashtable.

ChangeLog
dbus/dbus-hash.c

index ec0bb118220dcb2bda712959bcaaa9d629862093..29dcd4e39a19516100a39a7804ebb4a732a387da 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-02-16  Alexander Larsson  <alexl@redhat.com>
+
+       * dbus/dbus-hash.c (_dbus_hash_table_unref):
+       Actually free keys and values when destroying hashtable.
+
 2003-02-16  Anders Carlsson  <andersca@codefactory.se>
 
        * dbus/dbus-auth.c: (client_try_next_mechanism):
index 8bac61a88313ba529973c4fa8ad8029aa7ab3975..d7791d2ac880009f5534e5e49e577a94db96ead5 100644 (file)
@@ -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);
 }