Index: src/heap/incremental-marking.cc |
diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc |
index d4a1b64bb6a233b312c2f2ae2d1fcd04dabeb9cf..4fc68ecc0f14903b886488bfd26e4a760e01c04f 100644 |
--- a/src/heap/incremental-marking.cc |
+++ b/src/heap/incremental-marking.cc |
@@ -164,7 +164,9 @@ |
DCHECK(MemoryChunk::FromAddress(old_start) == |
MemoryChunk::FromAddress(new_start)); |
- if (!heap->incremental_marking()->IsMarking()) return; |
+ if (!heap->incremental_marking()->IsMarking() || |
+ Page::FromAddress(old_start)->IsFlagSet(Page::BLACK_PAGE)) |
+ return; |
// If the mark doesn't move, we don't check the color of the object. |
// It doesn't matter whether the object is black, since it hasn't changed |
@@ -601,9 +603,9 @@ |
DCHECK(FLAG_black_allocation); |
DCHECK(IsMarking()); |
black_allocation_ = true; |
- heap()->old_space()->MarkAllocationInfoBlack(); |
- heap()->map_space()->MarkAllocationInfoBlack(); |
- heap()->code_space()->MarkAllocationInfoBlack(); |
+ OldSpace* old_space = heap()->old_space(); |
+ old_space->EmptyAllocationInfo(); |
+ old_space->free_list()->Reset(); |
if (FLAG_trace_incremental_marking) { |
PrintF("[IncrementalMarking] Black allocation started\n"); |
} |
@@ -831,7 +833,7 @@ |
// them. |
if (map_word.IsForwardingAddress()) { |
HeapObject* dest = map_word.ToForwardingAddress(); |
- if (Marking::IsBlack(ObjectMarking::MarkBitFrom(dest->address()))) |
+ if (Page::FromAddress(dest->address())->IsFlagSet(Page::BLACK_PAGE)) |
continue; |
array[new_top] = dest; |
new_top = ((new_top + 1) & mask); |