Index: src/heap/incremental-marking.cc |
diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc |
index db19165f0a310eb0dec219df1226b8333c17e96e..cb2ac1e75d95f2b9ab0e02a4b0495291f5bae2eb 100644 |
--- a/src/heap/incremental-marking.cc |
+++ b/src/heap/incremental-marking.cc |
@@ -198,11 +198,15 @@ class IncrementalMarkingMarkingVisitor |
} while (scan_until_end && start_offset < object_size); |
chunk->set_progress_bar(start_offset); |
if (start_offset < object_size) { |
+ MarkCompactCollector* collector = heap->mark_compact_collector(); |
if (Marking::IsGrey(Marking::MarkBitFrom(object))) { |
- heap->mark_compact_collector()->marking_deque()->UnshiftGrey(object); |
+ collector->marking_deque()->UnshiftGrey(object); |
} else { |
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
- heap->mark_compact_collector()->marking_deque()->UnshiftBlack(object); |
+ if (!collector->marking_deque()->UnshiftBlack(object)) { |
+ MemoryChunk::IncrementLiveBytesFromGC(object, -object->Size()); |
+ Marking::BlackToGrey(object); |
+ } |
} |
heap->incremental_marking()->NotifyIncompleteScanOfObject( |
object_size - (start_offset - already_scanned_offset)); |