Browse Source

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.
tags/json-c-0.10-20120530
Eric Haszlakiewicz 13 years ago
parent
commit
64c0ca3690
2 changed files with 8 additions and 1 deletions
  1. +1
    -1
      linkhash.c
  2. +7
    -0
      linkhash.h

+ 1
- 1
linkhash.c View File

@@ -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;


+ 7
- 0
linkhash.h View File

@@ -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
*/


Loading…
Cancel
Save