diff --git a/dom/base/nsWrapperCache.cpp b/dom/base/nsWrapperCache.cpp index efb896c1e9e1..0e18bf3dc9df 100644 --- a/dom/base/nsWrapperCache.cpp +++ b/dom/base/nsWrapperCache.cpp @@ -29,7 +29,7 @@ void nsWrapperCache::HoldJSObjects(void* aScriptObjectHolder, JS::Zone* aWrapperZone) { cyclecollector::HoldJSObjectsImpl(aScriptObjectHolder, aTracer, aWrapperZone); if (mWrapper && !JS::ObjectIsTenured(mWrapper)) { - CycleCollectedJSRuntime::Get()->NurseryWrapperPreserved(mWrapper); + JS::HeapObjectPostWriteBarrier(&mWrapper, nullptr, mWrapper); } } @@ -48,6 +48,7 @@ void nsWrapperCache::ReleaseWrapper(void* aScriptObjectHolder) { if (PreservingWrapper()) { SetPreservingWrapper(false); cyclecollector::DropJSObjectsImpl(aScriptObjectHolder); + JS::HeapObjectPostWriteBarrier(&mWrapper, mWrapper, nullptr); } } diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJSRuntime.cpp index 97caf04988ec..57ee4f62f9e4 100644 --- a/xpcom/base/CycleCollectedJSRuntime.cpp +++ b/xpcom/base/CycleCollectedJSRuntime.cpp @@ -1602,14 +1602,7 @@ void CycleCollectedJSRuntime::JSObjectsTenured() { } } -#ifdef DEBUG - for (auto iter = mPreservedNurseryObjects.Iter(); !iter.Done(); iter.Next()) { - MOZ_ASSERT(JS::ObjectIsTenured(iter.Get().get())); - } -#endif - mNurseryObjects.Clear(); - mPreservedNurseryObjects.Clear(); } void CycleCollectedJSRuntime::NurseryWrapperAdded(nsWrapperCache* aCache) { @@ -1619,11 +1612,6 @@ void CycleCollectedJSRuntime::NurseryWrapperAdded(nsWrapperCache* aCache) { mNurseryObjects.InfallibleAppend(aCache); } -void CycleCollectedJSRuntime::NurseryWrapperPreserved(JSObject* aWrapper) { - mPreservedNurseryObjects.InfallibleAppend( - JS::PersistentRooted(mJSRuntime, aWrapper)); -} - void CycleCollectedJSRuntime::DeferredFinalize( DeferredFinalizeAppendFunction aAppendFunc, DeferredFinalizeFunction aFunc, void* aThing) { diff --git a/xpcom/base/CycleCollectedJSRuntime.h b/xpcom/base/CycleCollectedJSRuntime.h index 946512222e4a..cb1295877708 100644 --- a/xpcom/base/CycleCollectedJSRuntime.h +++ b/xpcom/base/CycleCollectedJSRuntime.h @@ -401,7 +401,6 @@ class CycleCollectedJSRuntime { // storage), because we do not want to keep it alive. nsWrapperCache handles // this for us via its "object moved" handling. void NurseryWrapperAdded(nsWrapperCache* aCache); - void NurseryWrapperPreserved(JSObject* aWrapper); void JSObjectsTenured(); void DeferredFinalize(DeferredFinalizeAppendFunction aAppendFunc, @@ -465,9 +464,6 @@ class CycleCollectedJSRuntime { static const size_t kSegmentSize = 512; SegmentedVector mNurseryObjects; - SegmentedVector, kSegmentSize, - InfallibleAllocPolicy> - mPreservedNurseryObjects; nsTHashSet mZonesWaitingForGC;