diff --git a/js/src/jit-test/tests/gc/bug-1371908.js b/js/src/jit-test/tests/gc/bug-1371908.js deleted file mode 100644 index da4540459c..0000000000 --- a/js/src/jit-test/tests/gc/bug-1371908.js +++ /dev/null @@ -1,6 +0,0 @@ -if (helperThreadCount() === 0) - quit(); -offThreadCompileScript(""); -startgc(0); -runOffThreadScript(); - diff --git a/js/src/jit-test/tests/gc/bug1146213.js b/js/src/jit-test/tests/gc/bug1146213.js deleted file mode 100644 index 14ca088275..0000000000 --- a/js/src/jit-test/tests/gc/bug1146213.js +++ /dev/null @@ -1,21 +0,0 @@ -if (!("setGCCallback" in this && - "schedulegc" in this && - "gcslice" in this && - "newGlobal" in this && - "helperThreadCount" in this)) -{ - quit(); -} - -if (helperThreadCount() == 0) - quit(); - -setGCCallback({ - action: "majorGC", -}); -schedulegc(this) -gcslice(3) -var lfGlobal = newGlobal(); -lfGlobal.offThreadCompileScript(""); -lfGlobal.runOffThreadScript(); - diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 73a2169a5f..cf3612d41f 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -6845,11 +6845,7 @@ gc::MergeCompartments(JSCompartment* source, JSCompartment* target) JSRuntime* rt = source->runtimeFromMainThread(); - MOZ_ASSERT(!source->zone()->wasGCStarted()); - MOZ_ASSERT(!target->zone()->wasGCStarted()); - JS::AutoAssertOnGC nogc(rt); - - AutoTraceSession session(rt); + AutoPrepareForTracing prepare(rt, SkipAtoms); // Cleanup tables and other state in the source compartment that will be // meaningless after merging into the target compartment. diff --git a/js/src/vm/HelperThreads.cpp b/js/src/vm/HelperThreads.cpp index 564f90b8d1..fda93abfbe 100644 --- a/js/src/vm/HelperThreads.cpp +++ b/js/src/vm/HelperThreads.cpp @@ -1103,13 +1103,12 @@ GlobalHelperThreadState::mergeParseTaskCompartment(JSRuntime* rt, ParseTask* par Handle global, JSCompartment* dest) { - // Finish any ongoing incremental GC that may affect the destination zone. - if (JS::IsIncrementalGCInProgress(rt) && dest->zone()->wasGCStarted()) - JS::FinishIncrementalGC(rt, JS::gcreason::API); - // After we call LeaveParseTaskZone() it's not safe to GC until we have // finished merging the contents of the parse task's compartment into the - // destination compartment. + // destination compartment. Finish any ongoing incremental GC first and + // assert that no allocation can occur. (Bug 1371908 changes this, but + // generates assertion failures.) + gc::AutoFinishGC finishGC(rt); JS::AutoAssertNoAlloc noAlloc(rt); LeaveParseTaskZone(rt, parseTask);