hash: Add _mesa_HashRemoveLocked() function.

Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Matt Turner 2015-07-30 14:24:07 -07:00
parent fb5dcb81cc
commit aded1160e5
2 changed files with 17 additions and 4 deletions

View file

@ -328,8 +328,8 @@ _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data)
* While holding the hash table's lock, searches the entry with the matching
* key and unlinks it.
*/
void
_mesa_HashRemove(struct _mesa_HashTable *table, GLuint key)
static inline void
_mesa_HashRemove_unlocked(struct _mesa_HashTable *table, GLuint key)
{
struct hash_entry *entry;
@ -343,17 +343,28 @@ _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key)
return;
}
mtx_lock(&table->Mutex);
if (key == DELETED_KEY_VALUE) {
table->deleted_key_data = NULL;
} else {
entry = _mesa_hash_table_search(table->ht, uint_key(key));
_mesa_hash_table_remove(table->ht, entry);
}
mtx_unlock(&table->Mutex);
}
void
_mesa_HashRemoveLocked(struct _mesa_HashTable *table, GLuint key)
{
_mesa_HashRemove_unlocked(table, key);
}
void
_mesa_HashRemove(struct _mesa_HashTable *table, GLuint key)
{
mtx_lock(&table->Mutex);
_mesa_HashRemove_unlocked(table, key);
mtx_unlock(&table->Mutex);
}
/**
* Delete all entries in a hash table, but don't delete the table itself.

View file

@ -54,6 +54,8 @@ extern void *_mesa_HashLookupLocked(struct _mesa_HashTable *table, GLuint key);
extern void _mesa_HashInsertLocked(struct _mesa_HashTable *table,
GLuint key, void *data);
extern void _mesa_HashRemoveLocked(struct _mesa_HashTable *table, GLuint key);
extern void
_mesa_HashDeleteAll(struct _mesa_HashTable *table,
void (*callback)(GLuint key, void *data, void *userData),