Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index b257da8f672009acbafa1763f7ba63d9239dafc4..1967228356c77266d48a368a186fcebef45743a9 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -3265,8 +3265,13 @@ void MarkCompactCollector::EvacuatePagesInParallel() { |
// happens upon moving (which we potentially didn't do). |
// - Leave the page in the list of pages of a space since we could not |
// fully evacuate it. |
+ // - Mark them for rescanning for store buffer entries as we otherwise |
+ // might have stale store buffer entries that become "valid" again |
+ // after reusing the memory. Note that all existing store buffer |
+ // entries of such pages are filtered before rescanning. |
DCHECK(p->IsEvacuationCandidate()); |
p->SetFlag(Page::COMPACTION_WAS_ABORTED); |
+ p->set_scan_on_scavenge(true); |
abandoned_pages++; |
break; |
case MemoryChunk::kCompactingFinalize: |