diff --git a/js/src/gc/GC.cpp b/js/src/gc/GC.cpp index 85047cc2d0b8..fdd7821bacbf 100644 --- a/js/src/gc/GC.cpp +++ b/js/src/gc/GC.cpp @@ -2103,7 +2103,7 @@ void GCRuntime::sweepZoneAfterCompacting(Zone* zone) { r->sweepGlobalObject(); r->sweepSelfHostingScriptSource(); r->sweepDebugEnvironments(); - r->traceWeakEdgesInJitRealm(trc); + r->sweepJitRealm(); r->sweepObjectRealm(); r->sweepTemplateObjects(); } @@ -5234,9 +5234,8 @@ void GCRuntime::sweepJitDataOnMainThread(JSFreeOp* fop) { { gcstats::AutoPhase ap(stats(), gcstats::PhaseKind::SWEEP_JIT_DATA); - SweepingTracer trc(rt); for (SweepGroupRealmsIter r(rt); !r.done(); r.next()) { - r->traceWeakEdgesInJitRealm(&trc); + r->sweepJitRealm(); } for (SweepGroupZonesIter zone(rt); !zone.done(); zone.next()) { diff --git a/js/src/gc/GCInternals.h b/js/src/gc/GCInternals.h index 2c5cb2d46731..a5625ed1a756 100644 --- a/js/src/gc/GCInternals.h +++ b/js/src/gc/GCInternals.h @@ -184,7 +184,6 @@ struct SweepingTracer final : public JS::CallbackTracer { bool onScriptEdge(JSScript** scriptp) override; bool onLazyScriptEdge(LazyScript** lazyp) override; bool onBaseShapeEdge(BaseShape** basep) override; - bool onJitCodeEdge(jit::JitCode** jitp) override; bool onScopeEdge(Scope** scopep) override; bool onRegExpSharedEdge(RegExpShared** sharedp) override; bool onBigIntEdge(BigInt** bip) override; diff --git a/js/src/gc/Marking.cpp b/js/src/gc/Marking.cpp index a5617454630c..9540a43ba58b 100644 --- a/js/src/gc/Marking.cpp +++ b/js/src/gc/Marking.cpp @@ -3473,9 +3473,6 @@ bool SweepingTracer::onLazyScriptEdge(LazyScript** lazyp) { bool SweepingTracer::onBaseShapeEdge(BaseShape** basep) { return sweepEdge(basep); } -bool SweepingTracer::onJitCodeEdge(jit::JitCode** jitp) { - return sweepEdge(jitp); -} bool SweepingTracer::onScopeEdge(Scope** scopep) { return sweepEdge(scopep); } bool SweepingTracer::onRegExpSharedEdge(RegExpShared** sharedp) { return sweepEdge(sharedp); diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp index ae755d7aa47c..a7662712b4bc 100644 --- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -580,15 +580,15 @@ void JitRuntime::SweepJitcodeGlobalTable(JSRuntime* rt) { } } -void JitRealm::traceWeak(JSTracer* trc, JS::Realm* realm) { +void JitRealm::sweep(JS::Realm* realm) { // Any outstanding compilations should have been cancelled by the GC. MOZ_ASSERT(!HasOffThreadIonCompile(realm)); stubCodes_->sweep(); for (WeakHeapPtrJitCode& stub : stubs_) { - if (stub) { - TraceWeakEdge(trc, &stub, "JitRealm::stubs_"); + if (stub && IsAboutToBeFinalized(&stub)) { + stub.set(nullptr); } } } diff --git a/js/src/jit/JitRealm.h b/js/src/jit/JitRealm.h index 52eb34d2cc3f..b7efba0be5f9 100644 --- a/js/src/jit/JitRealm.h +++ b/js/src/jit/JitRealm.h @@ -618,7 +618,7 @@ class JitRealm { return stubs_[StringConcat]; } - void traceWeak(JSTracer* trc, JS::Realm* realm); + void sweep(JS::Realm* realm); void discardStubs() { for (WeakHeapPtrJitCode& stubRef : stubs_) { diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp index fafbd0376bb8..913a96a55268 100644 --- a/js/src/vm/Realm.cpp +++ b/js/src/vm/Realm.cpp @@ -384,9 +384,9 @@ void Realm::sweepSelfHostingScriptSource() { } } -void Realm::traceWeakEdgesInJitRealm(JSTracer* trc) { +void Realm::sweepJitRealm() { if (jitRealm_) { - jitRealm_->traceWeak(trc, this); + jitRealm_->sweep(this); } } diff --git a/js/src/vm/Realm.h b/js/src/vm/Realm.h index ef0625cbbc58..221935d63414 100644 --- a/js/src/vm/Realm.h +++ b/js/src/vm/Realm.h @@ -779,7 +779,7 @@ class JS::Realm : public JS::shadow::Realm { void setValidAccessPtr(bool* accessp) { validAccessPtr_ = accessp; } bool ensureJitRealmExists(JSContext* cx); - void traceWeakEdgesInJitRealm(JSTracer* trc); + void sweepJitRealm(); js::jit::JitRealm* jitRealm() { return jitRealm_.get(); }