From 7e1c2d9d1e2790d1252f7b8588cbefec9f3c31af Mon Sep 17 00:00:00 2001 From: "vegorov@chromium.org" Date: Wed, 5 Oct 2011 09:42:20 +0000 Subject: [PATCH] Keep MemoryChunk::LiveBytes in sync when marking deque overflows. R=erik.corry@gmail.com BUG=v8:1672 Review URL: http://codereview.chromium.org/8139025 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9525 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mark-compact.cc | 5 ++++- src/mark-compact.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mark-compact.cc b/src/mark-compact.cc index e90a23d..450a58c 100644 --- a/src/mark-compact.cc +++ b/src/mark-compact.cc @@ -1703,6 +1703,7 @@ static void DiscoverGreyObjectsWithIterator(Heap* heap, MarkBit markbit = Marking::MarkBitFrom(object); if ((object->map() != filler_map) && Marking::IsGrey(markbit)) { Marking::GreyToBlack(markbit); + MemoryChunk::IncrementLiveBytes(object->address(), object->Size()); marking_deque->PushBlack(object); if (marking_deque->IsFull()) return; } @@ -1753,7 +1754,9 @@ static void DiscoverGreyObjectsOnPage(MarkingDeque* marking_deque, Page* p) { ASSERT(Marking::IsGrey(markbit)); Marking::GreyToBlack(markbit); Address addr = cell_base + offset * kPointerSize; - marking_deque->PushBlack(HeapObject::FromAddress(addr)); + HeapObject* object = HeapObject::FromAddress(addr); + MemoryChunk::IncrementLiveBytes(object->address(), object->Size()); + marking_deque->PushBlack(object); if (marking_deque->IsFull()) return; offset += 2; grey_objects >>= 2; diff --git a/src/mark-compact.h b/src/mark-compact.h index 469dd29..8685036 100644 --- a/src/mark-compact.h +++ b/src/mark-compact.h @@ -216,6 +216,7 @@ class MarkingDeque { ASSERT(object->IsHeapObject()); if (IsFull()) { Marking::BlackToGrey(object); + MemoryChunk::IncrementLiveBytes(object->address(), -object->Size()); SetOverflowed(); } else { array_[top_] = object; -- 2.7.4