fix: add growth_left for dump and load, to fix the bug that when loading from a phmap which has a lot of deleted slots may cause further inserts to hang

This commit is contained in:
lisa0916lisa@163.com
2023-05-30 00:09:40 +08:00
parent 1df34e5616
commit 8c8550dcb5
2 changed files with 4 additions and 0 deletions
+2
View File
@@ -2283,6 +2283,8 @@ private:
size_t& growth_left() { return std::get<0>(settings_); }
const size_t& growth_left() const { return std::get<0>(settings_); }
template <size_t N,
template <class, class, class, class> class RefSet,
class M, class P, class H, class E, class A>
+2
View File
@@ -59,6 +59,7 @@ bool raw_hash_set<Policy, Hash, Eq, Alloc>::phmap_dump(OutputArchive& ar) const
return true;
ar.saveBinary(ctrl_, sizeof(ctrl_t) * (capacity_ + Group::kWidth + 1));
ar.saveBinary(slots_, sizeof(slot_type) * capacity_);
ar.saveBinary(&growth_left(), sizeof(size_t));
return true;
}
@@ -79,6 +80,7 @@ bool raw_hash_set<Policy, Hash, Eq, Alloc>::phmap_load(InputArchive& ar) {
return true;
ar.loadBinary(ctrl_, sizeof(ctrl_t) * (capacity_ + Group::kWidth + 1));
ar.loadBinary(slots_, sizeof(slot_type) * capacity_);
ar.loadBinary(&growth_left(), sizeof(size_t));
return true;
}