diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/dict.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index b8cb23fe700..3d8b5d8fef1 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -192,13 +192,19 @@ err_out: static data_pair_t * _dict_lookup (dict_t *this, char *key) { + int hashval = 0; if (!this || !key) { gf_log_callingfn ("dict", GF_LOG_WARNING, "!this || !key (%s)", key); return NULL; } - int hashval = SuperFastHash (key, strlen (key)) % this->hash_size; + /* If the divisor is 1, the modulo is always 0, + * in such case avoid hash calculation. + */ + if (this->hash_size != 1) + hashval = SuperFastHash (key, strlen (key)) % this->hash_size; + data_pair_t *pair; for (pair = this->members[hashval]; pair != NULL; pair = pair->hash_next) { @@ -235,7 +241,7 @@ dict_lookup (dict_t *this, char *key, data_t **data) static int32_t _dict_set (dict_t *this, char *key, data_t *value, gf_boolean_t replace) { - int hashval; + int hashval = 0; data_pair_t *pair; char key_free = 0; int tmp = 0; @@ -250,8 +256,13 @@ _dict_set (dict_t *this, char *key, data_t *value, gf_boolean_t replace) key_free = 1; } - tmp = SuperFastHash (key, strlen (key)); - hashval = (tmp % this->hash_size); + /* If the divisor is 1, the modulo is always 0, + * in such case avoid hash calculation. + */ + if (this->hash_size != 1) { + tmp = SuperFastHash (key, strlen (key)); + hashval = (tmp % this->hash_size); + } /* Search for a existing key if 'replace' is asked for */ if (replace) { @@ -387,6 +398,8 @@ dict_get (dict_t *this, char *key) void dict_del (dict_t *this, char *key) { + int hashval = 0; + if (!this || !key) { gf_log_callingfn ("dict", GF_LOG_WARNING, "!this || key=%s", key); @@ -395,7 +408,12 @@ dict_del (dict_t *this, char *key) LOCK (&this->lock); - int hashval = SuperFastHash (key, strlen (key)) % this->hash_size; + /* If the divisor is 1, the modulo is always 0, + * in such case avoid hash calculation. + */ + if (this->hash_size != 1) + hashval = SuperFastHash (key, strlen (key)) % this->hash_size; + data_pair_t *pair = this->members[hashval]; data_pair_t *prev = NULL; |