From: vegorov@chromium.org Date: Wed, 5 Oct 2011 09:42:20 +0000 (+0000) Subject: Keep MemoryChunk::LiveBytes in sync when marking deque overflows. X-Git-Tag: upstream/4.7.83~18284 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7e1c2d9d1e2790d1252f7b8588cbefec9f3c31af;p=platform%2Fupstream%2Fv8.git 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 --- diff --git a/src/mark-compact.cc b/src/mark-compact.cc index e90a23d8a..450a58cb0 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 469dd29f1..86850369a 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;