diff --git a/src/lib/htable.c b/src/lib/htable.c index 397cf9b98c4..70c6cf6cba5 100644 --- a/src/lib/htable.c +++ b/src/lib/htable.c @@ -167,12 +167,12 @@ void htable::hash_index(uint8_t *key, uint32_t keylen) /* * tsize is the estimated number of entries in the hash table */ -htable::htable(void *item, void *link, int tsize, int nr_pages) +htable::htable(void *item, void *link, int tsize, int nr_pages, int nr_entries) { - init(item, link, tsize, nr_pages); + init(item, link, tsize, nr_pages, nr_entries); } -void htable::init(void *item, void *link, int tsize, int nr_pages) +void htable::init(void *item, void *link, int tsize, int nr_pages, int nr_entries) { int pwr; int pagesize; @@ -190,7 +190,7 @@ void htable::init(void *item, void *link, int tsize, int nr_pages) mask = ~((~0) << pwr); /* 3 bits => table size = 8 */ rshift = 30 - pwr; /* Start using bits 28, 29, 30 */ buckets = 1 << pwr; /* Hash table size -- power of two */ - max_items = buckets * 4; /* Allow average 4 entries per chain */ + max_items = buckets * nr_entries; /* Allow average nr_entries entries per chain */ table = (hlink **)malloc(buckets * sizeof(hlink *)); memset(table, 0, buckets * sizeof(hlink *)); diff --git a/src/lib/htable.h b/src/lib/htable.h index ec1fcc9dc48..3bb7fa9dff2 100644 --- a/src/lib/htable.h +++ b/src/lib/htable.h @@ -98,9 +98,11 @@ class htable : public SMARTALLOC { void grow_table(); /* Grow the table */ public: - htable(void *item, void *link, int tsize = 31, int nr_pages = 0); + htable(void *item, void *link, int tsize = 31, + int nr_pages = 0, int nr_entries = 4); ~htable() { destroy(); } - void init(void *item, void *link, int tsize = 31, int nr_pages = 0); + void init(void *item, void *link, int tsize = 31, + int nr_pages = 0, int nr_entries = 4); bool insert(char *key, void *item); bool insert(uint32_t key, void *item); bool insert(uint64_t key, void *item);