From: Eric Haszlakiewicz Date: Sat, 31 Mar 2012 22:33:58 +0000 (-0500) Subject: Define a LH_LOAD_FACTOR constant and note the range that it can be set to. X-Git-Tag: json-c-0.11-20130402~59^2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c4a9640028b6bf4ff635caeea75089cdad1a779;p=thirdparty%2Fjson-c.git Define a LH_LOAD_FACTOR constant and note the range that it can be set to. Change the resize check from "count > size" to "count >= size" to avoid a potential infinite loop with high load factors and a full hash table. --- diff --git a/linkhash.c b/linkhash.c index 3a9ba0e0..88c0a7cf 100644 --- a/linkhash.c +++ b/linkhash.c @@ -125,7 +125,7 @@ int lh_table_insert(struct lh_table *t, void *k, const void *v) unsigned long h, n; t->inserts++; - if(t->count > t->size * 0.66) lh_table_resize(t, t->size * 2); + if(t->count >= t->size * LH_LOAD_FACTOR) lh_table_resize(t, t->size * 2); h = t->hash_fn(k); n = h % t->size; diff --git a/linkhash.h b/linkhash.h index 90f219df..9d894604 100644 --- a/linkhash.h +++ b/linkhash.h @@ -21,6 +21,13 @@ extern "C" { */ #define LH_PRIME 0x9e370001UL +/** + * The fraction of filled hash buckets until an insert will cause the table + * to be resized. + * This can range from just above 0 up to 1.0. + */ +#define LH_LOAD_FACTOR 0.66 + /** * sentinel pointer value for empty slots */