[Mesa-dev] [PATCH 09/14] util: Implement deletion of entries

Thomas Helland thomashelland90 at gmail.com
Sun Jan 1 18:37:53 UTC 2017


---
 src/util/non_replacing_hash_table.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/util/non_replacing_hash_table.c b/src/util/non_replacing_hash_table.c
index a4c57e9349..33c93452c4 100644
--- a/src/util/non_replacing_hash_table.c
+++ b/src/util/non_replacing_hash_table.c
@@ -183,6 +183,7 @@ _mesa_hash_table_clear(struct hash_table *ht,
          delete_function(entry);
 
       entry->key = NULL;
+      entry->next_data = 0;
    }
 
    ht->entries = 0;
@@ -413,6 +414,10 @@ _mesa_hash_table_insert_pre_hashed(struct hash_table *ht, uint32_t hash,
  *
  * Note that deletion doesn't otherwise modify the table, so an iteration over
  * the table deleting entries is safe.
+ *
+ * IMPORTANT: The table only allows deleting the last entry of a chain of
+ * entries with matching keys. If an entry in the middle of the chain is deleted
+ * the chain will be broken, and the table will have unpredictable results.
  */
 void
 _mesa_hash_table_remove(struct hash_table *ht,
@@ -424,6 +429,7 @@ _mesa_hash_table_remove(struct hash_table *ht,
    entry->key = ht->deleted_key;
    ht->entries--;
    ht->deleted_entries++;
+   entry->next_data = 0;
 }
 
 /**
-- 
2.11.0



More information about the mesa-dev mailing list