Index: src/heap/store-buffer.cc |
diff --git a/src/heap/store-buffer.cc b/src/heap/store-buffer.cc |
index 9a469ee5f2759be2af7c7250c98626a695acae85..2ae73d9cfbbc7f1670e0a75a83942f8ad993df04 100644 |
--- a/src/heap/store-buffer.cc |
+++ b/src/heap/store-buffer.cc |
@@ -379,8 +379,10 @@ void StoreBuffer::ClearInvalidStoreBufferEntries() { |
// If the target object is not black, the source slot must be part |
// of a non-black (dead) object. |
HeapObject* heap_object = HeapObject::cast(object); |
- if (Marking::IsBlack(Marking::MarkBitFrom(heap_object)) && |
- heap_->mark_compact_collector()->IsSlotInLiveObject(addr)) { |
+ Page* heap_object_page = Page::FromAddress(heap_object->address()); |
+ if (heap_object_page->IsFlagSet(Page::BLACK_PAGE) || |
+ (Marking::IsBlack(Marking::MarkBitFrom(heap_object)) && |
+ heap_->mark_compact_collector()->IsSlotInLiveObject(addr))) { |
*new_top++ = addr; |
} |
} |