mirror of
https://github.com/borgbackup/borg.git
synced 2024-11-14 06:11:34 +03:00
fix bug in hashindex_set on resize, fixes #4829
the problem was that after a resize that was triggered by too few empty buckets, the rebuilt new hash table had entries at different positions than before, but the idx where to SET the entry was not recomputed afterwards.
This commit is contained in:
parent
1666a74e6b
commit
fa63150e14
@ -586,6 +586,16 @@ hashindex_set(HashIndex *index, const unsigned char *key, const unsigned char *v
|
||||
if(!hashindex_resize(index, index->num_buckets)) {
|
||||
return 0;
|
||||
}
|
||||
/* we have just built a fresh hashtable and removed all tombstones,
|
||||
* so we only have EMPTY or USED buckets, but no DELETED ones any more.
|
||||
*/
|
||||
idx = start_idx = hashindex_index(index, key);
|
||||
while(!BUCKET_IS_EMPTY(index, idx)) {
|
||||
idx++;
|
||||
if (idx >= index->num_buckets){
|
||||
idx -= index->num_buckets;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ptr = BUCKET_ADDR(index, idx);
|
||||
|
Loading…
Reference in New Issue
Block a user