Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user