Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence

This commit is contained in:
Jon Coppeard
2014-09-02 11:07:22 +02:00
parent 510f7fc33b
commit bc23226f38
9 changed files with 90 additions and 13 deletions

View File

@@ -41,14 +41,12 @@ IdToObjectMap::trace(JSTracer *trc)
}
void
IdToObjectMap::finalize(JSFreeOp *fop)
IdToObjectMap::sweep()
{
for (Table::Enum e(table_); !e.empty(); e.popFront()) {
DebugOnly<JSObject *> prior = e.front().value().get();
if (JS_IsAboutToBeFinalized(&e.front().value()))
e.removeFront();
else
MOZ_ASSERT(e.front().value() == prior);
}
}
@@ -97,14 +95,14 @@ ObjectToIdMap::init()
}
void
ObjectToIdMap::finalize(JSFreeOp *fop)
ObjectToIdMap::sweep()
{
for (Table::Enum e(*table_); !e.empty(); e.popFront()) {
JSObject *obj = e.front().key();
if (JS_IsAboutToBeFinalizedUnbarriered(&obj))
e.removeFront();
else
MOZ_ASSERT(obj == e.front().key());
else if (obj != e.front().key())
e.rekeyFront(obj);
}
}
@@ -596,3 +594,9 @@ JavaScriptShared::Wrap(JSContext *cx, HandleObject aObj, InfallibleTArray<CpowEn
return true;
}
void JavaScriptShared::fixupAfterMovingGC()
{
objects_.sweep();
cpows_.sweep();
objectIds_.sweep();
}