diff options
| -rw-r--r-- | lib/hash.c | 5 | ||||
| -rw-r--r-- | lib/hash.h | 5 | 
2 files changed, 4 insertions, 6 deletions
diff --git a/lib/hash.c b/lib/hash.c index 801871f839..66341cf2f1 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -141,18 +141,15 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))  	unsigned int key;  	unsigned int index;  	void *newdata; -	unsigned int len;  	struct hash_backet *backet;  	key = (*hash->hash_key)(data);  	index = key & (hash->size - 1); -	len = 0;  	for (backet = hash->index[index]; backet != NULL;  	     backet = backet->next) {  		if (backet->key == key && (*hash->hash_cmp)(backet->data, data))  			return backet->data; -		++len;  	}  	if (alloc_func) { @@ -160,7 +157,7 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))  		if (newdata == NULL)  			return NULL; -		if (len > HASH_THRESHOLD) { +		if (HASH_THRESHOLD(hash->count + 1, hash->size)) {  			hash_expand(hash);  			index = key & (hash->size - 1);  		} diff --git a/lib/hash.h b/lib/hash.h index 236abbbd6a..b6fe27e257 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -28,8 +28,9 @@ DECLARE_MTYPE(HASH)  DECLARE_MTYPE(HASH_BACKET)  /* Default hash table size.  */ -#define HASH_INITIAL_SIZE     256	/* initial number of backets. */ -#define HASH_THRESHOLD	      10	/* expand when backet. */ +#define HASH_INITIAL_SIZE 256 +/* Expansion threshold */ +#define HASH_THRESHOLD(used, size) ((used) > (size))  #define HASHWALK_CONTINUE 0  #define HASHWALK_ABORT -1  | 
