diff options
Diffstat (limited to 'deps/v8/src/heap/heap-inl.h')
-rw-r--r-- | deps/v8/src/heap/heap-inl.h | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/deps/v8/src/heap/heap-inl.h b/deps/v8/src/heap/heap-inl.h index edefe8e55d..68abf816b0 100644 --- a/deps/v8/src/heap/heap-inl.h +++ b/deps/v8/src/heap/heap-inl.h @@ -30,6 +30,7 @@ #include "src/heap/paged-spaces-inl.h" #include "src/heap/read-only-heap.h" #include "src/heap/read-only-spaces.h" +#include "src/heap/safepoint.h" #include "src/heap/spaces-inl.h" #include "src/heap/third-party/heap-api.h" #include "src/objects/allocation-site-inl.h" @@ -206,7 +207,7 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationType type, DCHECK(AllowHandleAllocation::IsAllowed()); DCHECK(AllowHeapAllocation::IsAllowed()); DCHECK_IMPLIES(type == AllocationType::kCode || type == AllocationType::kMap, - alignment == AllocationAlignment::kWordAligned); + alignment == AllocationAlignment::kTaggedAligned); DCHECK_EQ(gc_state(), NOT_IN_GC); #ifdef V8_ENABLE_ALLOCATION_TIMEOUT if (FLAG_random_gc_interval > 0 || FLAG_gc_interval >= 0) { @@ -320,7 +321,7 @@ HeapObject Heap::AllocateRawWith(int size, AllocationType allocation, DCHECK_EQ(gc_state(), NOT_IN_GC); Heap* heap = isolate()->heap(); if (allocation == AllocationType::kYoung && - alignment == AllocationAlignment::kWordAligned && + alignment == AllocationAlignment::kTaggedAligned && size <= MaxRegularHeapObjectSize(allocation) && V8_LIKELY(!FLAG_single_generation && FLAG_inline_new && FLAG_gc_interval == -1)) { @@ -791,13 +792,15 @@ AlwaysAllocateScopeForTesting::AlwaysAllocateScopeForTesting(Heap* heap) CodeSpaceMemoryModificationScope::CodeSpaceMemoryModificationScope(Heap* heap) : heap_(heap) { + DCHECK_EQ(ThreadId::Current(), heap_->isolate()->thread_id()); + heap_->safepoint()->AssertActive(); if (heap_->write_protect_code_memory()) { heap_->increment_code_space_memory_modification_scope_depth(); heap_->code_space()->SetCodeModificationPermissions(); LargePage* page = heap_->code_lo_space()->first_page(); while (page != nullptr) { DCHECK(page->IsFlagSet(MemoryChunk::IS_EXECUTABLE)); - CHECK(heap_->memory_allocator()->IsMemoryChunkExecutable(page)); + DCHECK(heap_->memory_allocator()->IsMemoryChunkExecutable(page)); page->SetCodeModificationPermissions(); page = page->next_page(); } @@ -811,7 +814,7 @@ CodeSpaceMemoryModificationScope::~CodeSpaceMemoryModificationScope() { LargePage* page = heap_->code_lo_space()->first_page(); while (page != nullptr) { DCHECK(page->IsFlagSet(MemoryChunk::IS_EXECUTABLE)); - CHECK(heap_->memory_allocator()->IsMemoryChunkExecutable(page)); + DCHECK(heap_->memory_allocator()->IsMemoryChunkExecutable(page)); page->SetDefaultCodePermissions(); page = page->next_page(); } @@ -821,21 +824,17 @@ CodeSpaceMemoryModificationScope::~CodeSpaceMemoryModificationScope() { CodePageCollectionMemoryModificationScope:: CodePageCollectionMemoryModificationScope(Heap* heap) : heap_(heap) { - if (heap_->write_protect_code_memory() && - !heap_->code_space_memory_modification_scope_depth()) { - heap_->EnableUnprotectedMemoryChunksRegistry(); + if (heap_->write_protect_code_memory()) { heap_->IncrementCodePageCollectionMemoryModificationScopeDepth(); } } CodePageCollectionMemoryModificationScope:: ~CodePageCollectionMemoryModificationScope() { - if (heap_->write_protect_code_memory() && - !heap_->code_space_memory_modification_scope_depth()) { + if (heap_->write_protect_code_memory()) { heap_->DecrementCodePageCollectionMemoryModificationScopeDepth(); if (heap_->code_page_collection_memory_modification_scope_depth() == 0) { heap_->ProtectUnprotectedMemoryChunks(); - heap_->DisableUnprotectedMemoryChunksRegistry(); } } } @@ -866,6 +865,16 @@ CodePageMemoryModificationScope::~CodePageMemoryModificationScope() { } } +IgnoreLocalGCRequests::IgnoreLocalGCRequests(Heap* heap) : heap_(heap) { + DCHECK_EQ(ThreadId::Current(), heap_->isolate()->thread_id()); + heap_->ignore_local_gc_requests_depth_++; +} + +IgnoreLocalGCRequests::~IgnoreLocalGCRequests() { + DCHECK_GT(heap_->ignore_local_gc_requests_depth_, 0); + heap_->ignore_local_gc_requests_depth_--; +} + } // namespace internal } // namespace v8 |