mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 22:25:25 +00:00
add hash table rebalancing in virHashUpdateEntry
The code in virHashUpdateEntry and virHashAddEntry is really similar. However, the latter rebalances the hash table when one of its buckets contains too many elements while the former does not. Fix this discrepancy.
This commit is contained in:
parent
aebe04d75e
commit
5c5880e047
@ -331,7 +331,7 @@ int
|
||||
virHashUpdateEntry(virHashTablePtr table, const char *name,
|
||||
void *userdata, virHashDeallocator f)
|
||||
{
|
||||
unsigned long key;
|
||||
unsigned long key, len = 0;
|
||||
virHashEntryPtr entry;
|
||||
virHashEntryPtr insert;
|
||||
char *new_name;
|
||||
@ -354,6 +354,7 @@ virHashUpdateEntry(virHashTablePtr table, const char *name,
|
||||
insert->payload = userdata;
|
||||
return (0);
|
||||
}
|
||||
len++;
|
||||
}
|
||||
if (STREQ(insert->name, name)) {
|
||||
if (f)
|
||||
@ -386,6 +387,10 @@ virHashUpdateEntry(virHashTablePtr table, const char *name,
|
||||
if (insert != NULL) {
|
||||
insert->next = entry;
|
||||
}
|
||||
|
||||
if (len > MAX_HASH_LEN)
|
||||
virHashGrow(table, MAX_HASH_LEN * table->size);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user