Fix bugs 484 and 485.

This commit is contained in:
Mark Riddoch 2014-09-01 16:51:05 +01:00
parent 493feb49ba
commit 60d6b5b699

View File

@ -79,9 +79,13 @@ nullfn(void *data)
}
/**
* Allocate a new hash table
* Allocate a new hash table.
*
* @param size The size of the hash table
* The hashtable must have a size of at least one, however to be of any
* practical use a larger size sould be chosen as the size relates to the number
* of has buckets in the table.
*
* @param size The size of the hash table, msut be > 0
* @param hashfn The user supplied hash function
* @param cmpfn The user supplied key comparison function
* @return The hashtable table
@ -218,6 +222,7 @@ hashtable_add(HASHTABLE *table, void *key, void *value)
/* check succesfull key copy */
if ( ptr->key == NULL) {
hashtable_write_unlock(table);
return 0;
}
@ -230,6 +235,7 @@ hashtable_add(HASHTABLE *table, void *key, void *value)
table->kfreefn(ptr->key);
/* value not copied, return */
hashtable_write_unlock(table);
return 0;
}
@ -546,10 +552,10 @@ HASHENTRIES *entries;
iter->depth++;
while (iter->chain < iter->table->hashsize)
{
hashtable_read_lock(iter->table);
if ((entries = iter->table->entries[iter->chain]) != NULL)
{
i = 0;
hashtable_read_lock(iter->table);
while (entries && i < iter->depth)
{
entries = entries->next;
@ -559,6 +565,10 @@ HASHENTRIES *entries;
if (entries)
return entries->key;
}
else
{
hashtable_read_unlock(iter->table);
}
iter->depth = 0;
iter->chain++;
}