diff --git a/js/src/jit/CompileWrappers.cpp b/js/src/jit/CompileWrappers.cpp index 3fa406274b..d7b89d7fa7 100644 --- a/js/src/jit/CompileWrappers.cpp +++ b/js/src/jit/CompileWrappers.cpp @@ -242,10 +242,15 @@ CompileZone::addressOfStringNurseryCurrentEnd() return zone()->runtimeFromAnyThread()->gc.addressOfStringNurseryCurrentEnd(); } +bool +CompileZone::canNurseryAllocateStrings() +{ + return nurseryExists() && zone()->group()->nursery().canAllocateStrings(); +} + bool CompileZone::nurseryExists() { - MOZ_ASSERT(CurrentThreadCanAccessZone(zone())); return zone()->group()->nursery().exists(); } diff --git a/js/src/jit/CompileWrappers.h b/js/src/jit/CompileWrappers.h index 4854b87491..7847ded810 100644 --- a/js/src/jit/CompileWrappers.h +++ b/js/src/jit/CompileWrappers.h @@ -99,7 +99,9 @@ class CompileZone const void* addressOfNurseryCurrentEnd(); const void* addressOfStringNurseryCurrentEnd(); - const void* addressOfFreeList(gc::AllocKind allocKind); + bool nurseryExists(); + bool canNurseryAllocateStrings(); + void setMinorGCShouldCancelIonCompilations(); }; class JitCompartment; diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp index 7b1a0145f6..f3dd99d73c 100644 --- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -9092,7 +9092,8 @@ IonBuilder::loadStaticSlot(JSObject* staticObject, BarrierKind barrier, Temporar bool jit::NeedsPostBarrier(MDefinition* value) { - if (!GetJitContext()->runtime->gcNursery().exists()) + CompileZone* zone = GetJitContext()->compartment->zone(); + if (!zone->nurseryExists()) return false; if (value->mightBeType(MIRType::Object)) return true; diff --git a/js/src/jit/MIRGraph.cpp b/js/src/jit/MIRGraph.cpp index fdb9b1752a..c0fad8325d 100644 --- a/js/src/jit/MIRGraph.cpp +++ b/js/src/jit/MIRGraph.cpp @@ -37,7 +37,7 @@ MIRGenerator::MIRGenerator(CompileCompartment* compartment, const JitCompileOpti instrumentedProfiling_(false), instrumentedProfilingIsCached_(false), safeForMinorGC_(true), - stringsCanBeInNursery_(GetJitContext()->runtime()->canNurseryAllocateStrings() : false), + stringsCanBeInNursery_(compartment ? compartment->zone()->canNurseryAllocateStrings() : false), minWasmHeapLength_(0), options(options), gs_(alloc)