Add destructor for hash_table
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 19:17:06 +0000 (12:17 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 19:17:06 +0000 (12:17 -0700)
src/mesa/shader/hash_table.c
src/mesa/shader/hash_table.h

index 9b8f251bccd0a94c13af0c397ffe61db9a61bda0..3ff603b3681abd2e48900c81317d929f07f23b3f 100644 (file)
@@ -68,7 +68,8 @@ hash_table_ctor(unsigned num_buckets, hash_func_t hash,
         num_buckets = 16;
     }
 
-    ht = malloc(sizeof(*ht) + ((num_buckets - 1) * sizeof(ht->buckets[0])));
+    ht = _mesa_malloc(sizeof(*ht) + ((num_buckets - 1) 
+                                    * sizeof(ht->buckets[0])));
     if (ht != NULL) {
         ht->hash = hash;
         ht->compare = compare;
@@ -83,6 +84,14 @@ hash_table_ctor(unsigned num_buckets, hash_func_t hash,
 }
 
 
+void
+hash_table_dtor(struct hash_table *ht)
+{
+   hash_table_clear(ht);
+   _mesa_free(ht);
+}
+
+
 void
 hash_table_clear(struct hash_table *ht)
 {
@@ -94,7 +103,7 @@ hash_table_clear(struct hash_table *ht)
    for (i = 0; i < ht->num_buckets; i++) {
       foreach_s(node, temp, & ht->buckets[i]) {
         remove_from_list(node);
-        free(node);
+        _mesa_free(node);
       }
 
       assert(is_empty_list(& ht->buckets[i]));
@@ -128,7 +137,7 @@ hash_table_insert(struct hash_table *ht, void *data, const void *key)
     const unsigned bucket = hash_value % ht->num_buckets;
     struct hash_node *node;
 
-    node = calloc(1, sizeof(*node));
+    node = _mesa_calloc(1, sizeof(*node));
 
     node->data = data;
     node->key = key;
index 83ae7f07c786d9aa86df744398e80261160b22d0..7b302f5dbeee0e23f4228cbc59e42ccda0e3678e 100644 (file)
@@ -53,6 +53,15 @@ extern struct hash_table *hash_table_ctor(unsigned num_buckets,
     hash_func_t hash, hash_compare_func_t compare);
 
 
+/**
+ * Release all memory associated with a hash table
+ *
+ * \warning
+ * This function cannot release memory occupied either by keys or data.
+ */
+extern void hash_table_dtor(struct hash_table *ht);
+
+
 /**
  * Flush all entries from a hash table
  *