author | Terrence Cole <terrence@mozilla.com> |
Fri, 29 Jul 2016 14:22:42 -0700 | |
changeset 312849 | 4fb9118e1f62fb16d7e747b647b744db23718468 |
parent 312848 | f6efc93a3267fdaa88cc2e5bcf3e1dce153189c4 |
child 312850 | 9db0bc3c54cedacf39b88c5ab267836b2cf1cdb5 |
push id | 81470 |
push user | tcole@mozilla.com |
push date | Tue, 06 Sep 2016 20:06:56 +0000 |
treeherder | mozilla-inbound@9db0bc3c54ce [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jonco |
bugs | 1290591 |
milestone | 51.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/gc/RootMarking.cpp +++ b/js/src/gc/RootMarking.cpp @@ -290,16 +290,20 @@ js::gc::GCRuntime::traceRuntimeForMinorG // Note that we *must* trace the runtime during the SHUTDOWN_GC's minor GC // despite having called FinishRoots already. This is because FinishRoots // does not clear the crossCompartmentWrapper map. It cannot do this // because Proxy's trace for CrossCompartmentWrappers asserts presence in // the map. And we can reach its trace function despite having finished the // roots via the edges stored by the pre-barrier verifier when we finish // the verifier for the last time. gcstats::AutoPhase ap(stats, gcstats::PHASE_MARK_ROOTS); + + // FIXME: As per bug 1298816 comment 12, we should be able to remove this. + jit::JitRuntime::MarkJitcodeGlobalTableUnconditionally(trc); + traceRuntimeCommon(trc, TraceRuntime, lock); } void js::TraceRuntime(JSTracer* trc) { MOZ_ASSERT(!trc->isMarkingTracer()); @@ -357,20 +361,16 @@ js::gc::GCRuntime::traceRuntimeCommon(JS if (traceOrMark == TraceRuntime || rt->atomsCompartment(lock)->zone()->isCollecting()) { MarkPermanentAtoms(trc); MarkAtoms(trc, lock); MarkWellKnownSymbols(trc); jit::JitRuntime::Mark(trc, lock); } } - // This table is weak in major GC's. - if (rt->isHeapMinorCollecting()) - jit::JitRuntime::MarkJitcodeGlobalTableUnconditionally(trc); - // Trace anything in the single context. Note that this is actually the // same struct as the JSRuntime, but is still split for historical reasons. rt->contextFromMainThread()->mark(trc); // Trace all compartment roots, but not the compartment itself; it is // marked via the parent pointer if traceRoots actually traces anything. for (CompartmentsIter c(rt, SkipAtoms); !c.done(); c.next()) c->traceRoots(trc, traceOrMark);