diff --git a/Source/JavaScriptCore/heap/Heap.h b/Source/JavaScriptCore/heap/Heap.h index 8df576acf7f8..ba3b1e55af93 100644 --- a/Source/JavaScriptCore/heap/Heap.h +++ b/Source/JavaScriptCore/heap/Heap.h @@ -575,6 +575,7 @@ class Heap { friend class HeapVerifier; friend class IsoSubspacePerVM; friend class JITStubRoutine; + friend class JSArray; friend class LLIntOffsetsExtractor; friend class MarkStackMergingConstraint; friend class MarkedSpace; diff --git a/Source/JavaScriptCore/runtime/JSArray.cpp b/Source/JavaScriptCore/runtime/JSArray.cpp index 5803e2564be4..e4d3461c8125 100644 --- a/Source/JavaScriptCore/runtime/JSArray.cpp +++ b/Source/JavaScriptCore/runtime/JSArray.cpp @@ -62,6 +62,7 @@ JSArray* JSArray::tryCreateUninitializedRestricted(ObjectInitializationScope& sc deferralContext, AllocationFailureMode::ReturnNull); if (UNLIKELY(!temp)) return nullptr; + vm.heap.incrementDeferralDepth(); butterfly = Butterfly::fromBase(temp, 0, outOfLineStorage); butterfly->setVectorLength(vectorLength); butterfly->setPublicLength(initialLength); @@ -84,6 +85,7 @@ JSArray* JSArray::tryCreateUninitializedRestricted(ObjectInitializationScope& sc deferralContext, AllocationFailureMode::ReturnNull); if (UNLIKELY(!temp)) return nullptr; + vm.heap.incrementDeferralDepth(); butterfly = Butterfly::fromBase(temp, indexBias, outOfLineStorage); *butterfly->indexingHeader() = indexingHeaderForArrayStorage(initialLength, vectorLength); ArrayStorage* storage = butterfly->arrayStorage(); @@ -97,6 +99,7 @@ JSArray* JSArray::tryCreateUninitializedRestricted(ObjectInitializationScope& sc JSArray* result = createWithButterfly(vm, deferralContext, structure, butterfly); scope.notifyAllocated(result); + vm.heap.decrementDeferralDepth(); return result; }