mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
hashmap: return more information from resize_buckets()
Return 0 if no resize was needed, 1 if successfully resized and negative on error.
This commit is contained in:
parent
b3dcf58e28
commit
9700d6980f
@ -369,7 +369,7 @@ static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *ke
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool resize_buckets(Hashmap *h) {
|
static int resize_buckets(Hashmap *h) {
|
||||||
struct hashmap_entry **n, *i;
|
struct hashmap_entry **n, *i;
|
||||||
unsigned m;
|
unsigned m;
|
||||||
uint8_t nkey[HASH_KEY_SIZE];
|
uint8_t nkey[HASH_KEY_SIZE];
|
||||||
@ -377,7 +377,7 @@ static bool resize_buckets(Hashmap *h) {
|
|||||||
assert(h);
|
assert(h);
|
||||||
|
|
||||||
if (_likely_(h->n_entries*4 < h->n_buckets*3))
|
if (_likely_(h->n_entries*4 < h->n_buckets*3))
|
||||||
return false;
|
return 0;
|
||||||
|
|
||||||
/* Increase by four */
|
/* Increase by four */
|
||||||
m = (h->n_entries+1)*4-1;
|
m = (h->n_entries+1)*4-1;
|
||||||
@ -385,7 +385,7 @@ static bool resize_buckets(Hashmap *h) {
|
|||||||
/* If we hit OOM we simply risk packed hashmaps... */
|
/* If we hit OOM we simply risk packed hashmaps... */
|
||||||
n = new0(struct hashmap_entry*, m);
|
n = new0(struct hashmap_entry*, m);
|
||||||
if (!n)
|
if (!n)
|
||||||
return false;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Let's use a different randomized hash key for the
|
/* Let's use a different randomized hash key for the
|
||||||
* extension, so that people cannot guess what we are using
|
* extension, so that people cannot guess what we are using
|
||||||
@ -424,7 +424,7 @@ static bool resize_buckets(Hashmap *h) {
|
|||||||
|
|
||||||
memcpy(h->hash_key, nkey, HASH_KEY_SIZE);
|
memcpy(h->hash_key, nkey, HASH_KEY_SIZE);
|
||||||
|
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __hashmap_put(Hashmap *h, const void *key, void *value, unsigned hash) {
|
static int __hashmap_put(Hashmap *h, const void *key, void *value, unsigned hash) {
|
||||||
@ -432,7 +432,7 @@ static int __hashmap_put(Hashmap *h, const void *key, void *value, unsigned hash
|
|||||||
|
|
||||||
struct hashmap_entry *e;
|
struct hashmap_entry *e;
|
||||||
|
|
||||||
if (resize_buckets(h))
|
if (resize_buckets(h) > 0)
|
||||||
hash = bucket_hash(h, key);
|
hash = bucket_hash(h, key);
|
||||||
|
|
||||||
if (h->from_pool)
|
if (h->from_pool)
|
||||||
|
Loading…
Reference in New Issue
Block a user