+/**
+ * Walk over all entries in a hash table, calling callback function for each.
+ * \param table the hash table to walk
+ * \param callback the callback function
+ * \param userData arbitrary pointer to pass along to the callback
+ * (this is typically a struct gl_context pointer)
+ */
+void
+_mesa_HashWalk(const struct _mesa_HashTable *table,
+ void (*callback)(GLuint key, void *data, void *userData),
+ void *userData)
+{
+ /* cast-away const */
+ struct _mesa_HashTable *table2 = (struct _mesa_HashTable *) table;
+ struct hash_entry *entry;
+
+ assert(table);
+ assert(callback);
+ mtx_lock(&table2->Mutex);
+ hash_table_foreach(table->ht, entry) {
+ callback((uintptr_t)entry->key, entry->data, userData);
+ }
+ if (table->deleted_key_data)
+ callback(DELETED_KEY_VALUE, table->deleted_key_data, userData);
+ mtx_unlock(&table2->Mutex);
+}
+
+static void
+debug_print_entry(GLuint key, void *data, void *userData)
+{
+ _mesa_debug(NULL, "%u %p\n", key, data);
+}