зеркало из https://github.com/mozilla/pjs.git
Bug 699796 - Note objects holding JSScript as roots in the CC. r=igor.
--HG-- extra : rebase_source : 68ef72cd709aed89ee6a1cc30bd6079d3e1ddf3d
This commit is contained in:
Родитель
d88cbc7432
Коммит
fbcc34faa9
|
@ -469,13 +469,11 @@ CheckParticipatesInCycleCollection(PRUint32 aLangID, void *aThing,
|
|||
{
|
||||
Closure *closure = static_cast<Closure*>(aClosure);
|
||||
|
||||
if (!closure->cycleCollectionEnabled &&
|
||||
closure->cycleCollectionEnabled =
|
||||
aLangID == nsIProgrammingLanguage::JAVASCRIPT &&
|
||||
js_GetGCThingTraceKind(aThing) == JSTRACE_OBJECT) {
|
||||
closure->cycleCollectionEnabled =
|
||||
xpc::ParticipatesInCycleCollection(closure->cx,
|
||||
static_cast<JSObject*>(aThing));
|
||||
}
|
||||
AddToCCKind(js_GetGCThingTraceKind(aThing)) &&
|
||||
xpc::ParticipatesInCycleCollection(closure->cx,
|
||||
static_cast<js::gc::Cell*>(aThing));
|
||||
}
|
||||
|
||||
static JSDHashOperator
|
||||
|
@ -485,7 +483,6 @@ NoteJSHolder(JSDHashTable *table, JSDHashEntryHdr *hdr, uint32 number,
|
|||
ObjectHolder* entry = reinterpret_cast<ObjectHolder*>(hdr);
|
||||
Closure *closure = static_cast<Closure*>(arg);
|
||||
|
||||
closure->cycleCollectionEnabled = false;
|
||||
entry->tracer->Trace(entry->holder, CheckParticipatesInCycleCollection,
|
||||
closure);
|
||||
if (!closure->cycleCollectionEnabled)
|
||||
|
|
|
@ -418,14 +418,6 @@ nsXPConnect::GarbageCollect()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// JSTRACE_XML can recursively hold on to more JSTRACE_XML objects, adding it to
|
||||
// the cycle collector avoids stack overflow.
|
||||
inline bool
|
||||
AddToCCKind(JSGCTraceKind kind)
|
||||
{
|
||||
return kind == JSTRACE_OBJECT || kind == JSTRACE_XML || kind == JSTRACE_SCRIPT;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_CC
|
||||
struct NoteJSRootTracer : public JSTracer
|
||||
{
|
||||
|
|
|
@ -455,6 +455,14 @@ private:
|
|||
// returned as function call result values they are not addref'd. Exceptions
|
||||
// to this rule are noted explicitly.
|
||||
|
||||
// JSTRACE_XML can recursively hold on to more JSTRACE_XML objects, adding it to
|
||||
// the cycle collector avoids stack overflow.
|
||||
inline bool
|
||||
AddToCCKind(JSGCTraceKind kind)
|
||||
{
|
||||
return kind == JSTRACE_OBJECT || kind == JSTRACE_XML || kind == JSTRACE_SCRIPT;
|
||||
}
|
||||
|
||||
const bool OBJ_IS_GLOBAL = true;
|
||||
const bool OBJ_IS_NOT_GLOBAL = false;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче