mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 906387 - Rehash hash tables if necessary when rekeying during minor GC r=terrence
This commit is contained in:
parent
b7ff918ae2
commit
8bab73cb34
@ -253,7 +253,7 @@ class HashMap
|
||||
void rekey(const Lookup &old_key, const Key &new_key) {
|
||||
if (old_key != new_key) {
|
||||
if (Ptr p = lookup(old_key))
|
||||
impl.rekey(p, new_key, new_key);
|
||||
impl.rekeyAndMaybeRehash(p, new_key, new_key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -452,7 +452,7 @@ class HashSet
|
||||
void rekey(const Lookup &old_key, const T &new_key) {
|
||||
if (old_key != new_key) {
|
||||
if (Ptr p = lookup(old_key))
|
||||
impl.rekey(p, new_key, new_key);
|
||||
impl.rekeyAndMaybeRehash(p, new_key, new_key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -814,7 +814,7 @@ class HashTable : private AllocPolicy
|
||||
// a new key at the new Lookup position. |front()| is invalid after
|
||||
// this operation until the next call to |popFront()|.
|
||||
void rekeyFront(const Lookup &l, const Key &k) {
|
||||
table.rekey(*this->cur, l, k);
|
||||
table.rekeyWithoutRehash(*this->cur, l, k);
|
||||
rekeyed = true;
|
||||
this->validEntry = false;
|
||||
}
|
||||
@ -1462,7 +1462,7 @@ class HashTable : private AllocPolicy
|
||||
checkUnderloaded();
|
||||
}
|
||||
|
||||
void rekey(Ptr p, const Lookup &l, const Key &k)
|
||||
void rekeyWithoutRehash(Ptr p, const Lookup &l, const Key &k)
|
||||
{
|
||||
JS_ASSERT(table);
|
||||
mozilla::ReentrancyGuard g(*this);
|
||||
@ -1473,6 +1473,12 @@ class HashTable : private AllocPolicy
|
||||
putNewInfallible(l, mozilla::Move(t));
|
||||
}
|
||||
|
||||
void rekeyAndMaybeRehash(Ptr p, const Lookup &l, const Key &k)
|
||||
{
|
||||
rekeyWithoutRehash(p, l, k);
|
||||
checkOverRemoved();
|
||||
}
|
||||
|
||||
#undef METER
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user