* Fix subtle bug in linkhash where lookup could hang after all slots
were filled then successively freed.
Spotted by Jean-Marc Naud, j dash m at newtraxtech dot com
git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@54 327403b1-1117-474d-bef2-5cb71233fd97
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
0.10
|
||||||
|
* Fix subtle bug in linkhash where lookup could hang after all slots
|
||||||
|
were filled then successively freed.
|
||||||
|
Spotted by Jean-Marc Naud, j dash m at newtraxtech dot com
|
||||||
|
* Make json_object_from_file take const char *filename
|
||||||
|
Spotted by Vikram Raj V, vsagar at attinteractive dot com
|
||||||
* Add handling of surrogate pairs (json_tokener.c, test4.c, Makefile.am)
|
* Add handling of surrogate pairs (json_tokener.c, test4.c, Makefile.am)
|
||||||
Brent Miller, bdmiller at yahoo dash inc dot com
|
Brent Miller, bdmiller at yahoo dash inc dot com
|
||||||
* Correction to comment describing printbuf_memappend in printbuf.h
|
* Correction to comment describing printbuf_memappend in printbuf.h
|
||||||
|
|||||||
@@ -158,13 +158,15 @@ struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k)
|
|||||||
{
|
{
|
||||||
unsigned long h = t->hash_fn(k);
|
unsigned long h = t->hash_fn(k);
|
||||||
unsigned long n = h % t->size;
|
unsigned long n = h % t->size;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
t->lookups++;
|
t->lookups++;
|
||||||
while( 1 ) {
|
while( count < t->size ) {
|
||||||
if(t->table[n].k == LH_EMPTY) return NULL;
|
if(t->table[n].k == LH_EMPTY) return NULL;
|
||||||
if(t->table[n].k != LH_FREED &&
|
if(t->table[n].k != LH_FREED &&
|
||||||
t->equal_fn(t->table[n].k, k)) return &t->table[n];
|
t->equal_fn(t->table[n].k, k)) return &t->table[n];
|
||||||
if(++n == t->size) n = 0;
|
if(++n == t->size) n = 0;
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user