[heap] Ensure that VisitFixedArray pushes grey or black array

in marking worklist.

Bug: chromium:769173
Change-Id: I4b3ce27d37bec19ec5cc342b4d26a2a45af34b5f
Reviewed-on: https://chromium-review.googlesource.com/691728
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48224}
This commit is contained in:
Ulan Degenbaev 2017-09-29 12:08:40 +02:00 committed by Commit Bot
parent cbaa568275
commit 69aa6e5736

View File

@ -214,11 +214,17 @@ class IncrementalMarkingMarkingVisitor final
int start_offset =
Max(FixedArray::BodyDescriptor::kStartOffset, chunk->progress_bar());
if (start_offset < object_size) {
// Ensure that the object is either grey or black before pushing it
// into marking worklist.
incremental_marking_->marking_state()->WhiteToGrey(object);
if (FLAG_concurrent_marking) {
incremental_marking_->marking_worklist()->PushBailout(object);
} else {
incremental_marking_->marking_worklist()->Push(object);
}
DCHECK(incremental_marking_->marking_state()->IsGrey(object) ||
incremental_marking_->marking_state()->IsBlack(object));
int end_offset =
Min(object_size, start_offset + kProgressBarScanningChunk);
int already_scanned_offset = start_offset;