Commit 9076fce8 authored by Michael Lippautz's avatar Michael Lippautz Committed by V8 LUCI CQ

[heap] Fix regression around GC request via stack guard

When a GC was requested via stack guard, we don't restart incremental
marking anymore on finding new objects but rather finish the GC cycle.

This regressed in https://crrev.com/c/3702801

Bug: v8:12985, chromium:1338071, v8:12775
Change-Id: Ie515cea6d5345ad1111a4fb9f042cffc52083453
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3716486Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81291}
parent 94ebff7b
...@@ -1529,7 +1529,7 @@ void Heap::HandleGCRequest() { ...@@ -1529,7 +1529,7 @@ void Heap::HandleGCRequest() {
CheckMemoryPressure(); CheckMemoryPressure();
} else if (CollectionRequested()) { } else if (CollectionRequested()) {
CheckCollectionRequested(); CheckCollectionRequested();
} else if (incremental_marking()->IsComplete()) { } else if (incremental_marking()->CollectionRequested()) {
CollectAllGarbage(current_gc_flags_, CollectAllGarbage(current_gc_flags_,
GarbageCollectionReason::kFinalizeMarkingViaStackGuard, GarbageCollectionReason::kFinalizeMarkingViaStackGuard,
current_gc_callback_flags_); current_gc_callback_flags_);
......
...@@ -524,7 +524,9 @@ bool IncrementalMarking::Stop() { ...@@ -524,7 +524,9 @@ bool IncrementalMarking::Stop() {
} }
} }
collection_requested_ = false;
heap_->isolate()->stack_guard()->ClearGC(); heap_->isolate()->stack_guard()->ClearGC();
SetState(STOPPED); SetState(STOPPED);
is_compacting_ = false; is_compacting_ = false;
FinishBlackAllocation(); FinishBlackAllocation();
...@@ -608,6 +610,7 @@ void IncrementalMarking::MarkingComplete(CompletionAction action) { ...@@ -608,6 +610,7 @@ void IncrementalMarking::MarkingComplete(CompletionAction action) {
} }
if (action == CompletionAction::kGcViaStackGuard) { if (action == CompletionAction::kGcViaStackGuard) {
collection_requested_ = true;
heap_->isolate()->stack_guard()->RequestGC(); heap_->isolate()->stack_guard()->RequestGC();
} }
} }
......
...@@ -105,6 +105,8 @@ class V8_EXPORT_PRIVATE IncrementalMarking final { ...@@ -105,6 +105,8 @@ class V8_EXPORT_PRIVATE IncrementalMarking final {
bool IsMarking() const { return state() >= MARKING; } bool IsMarking() const { return state() >= MARKING; }
bool IsComplete() const { return state() == COMPLETE; } bool IsComplete() const { return state() == COMPLETE; }
bool CollectionRequested() const { return collection_requested_; }
bool CanBeActivated(); bool CanBeActivated();
bool WasActivated(); bool WasActivated();
...@@ -269,6 +271,7 @@ class V8_EXPORT_PRIVATE IncrementalMarking final { ...@@ -269,6 +271,7 @@ class V8_EXPORT_PRIVATE IncrementalMarking final {
bool is_compacting_ = false; bool is_compacting_ = false;
bool was_activated_ = false; bool was_activated_ = false;
bool black_allocation_ = false; bool black_allocation_ = false;
bool collection_requested_ = false;
IncrementalMarkingJob incremental_marking_job_; IncrementalMarkingJob incremental_marking_job_;
Observer new_generation_observer_; Observer new_generation_observer_;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment