Bug 1479673 - Disable the analysis while calling function pointers during tracing, r=me.

Fixes a hazard introduced by allowing the analysis to correctly see through more of the callgraph.

--HG--
extra : topic : hazard
extra : rebase_source : a2b20f3a4c5127c502c1402ca9abbd1e2ad0d382
This commit is contained in:
Steve Fink 2018-08-13 10:49:16 -07:00
Родитель 91f4fe8c61
Коммит 45873100f5
1 изменённых файлов: 7 добавлений и 0 удалений

Просмотреть файл

@ -116,6 +116,10 @@ JS_FOR_EACH_TRACEKIND(TRACE_ROOTS)
#undef TRACE_ROOTS
TracePersistentRootedList<jsid>(trc, heapRoots.ref()[JS::RootKind::Id], "persistent-id");
TracePersistentRootedList<Value>(trc, heapRoots.ref()[JS::RootKind::Value], "persistent-value");
// ConcreteTraceable calls through a function pointer.
JS::AutoSuppressGCAnalysis nogc;
TracePersistentRootedList<ConcreteTraceable>(
trc, heapRoots.ref()[JS::RootKind::Traceable], "persistent-traceable");
}
@ -391,6 +395,9 @@ js::gc::GCRuntime::traceRuntimeCommon(JSTracer* trc, TraceOrMarkRuntime traceOrM
if (!JS::RuntimeHeapIsMinorCollecting()) {
gcstats::AutoPhase ap(stats(), gcstats::PhaseKind::MARK_EMBEDDING);
// The analysis doesn't like the function pointers below.
JS::AutoSuppressGCAnalysis nogc;
/*
* The embedding can register additional roots here.
*