Index: src/heap/store-buffer.cc |
diff --git a/src/heap/store-buffer.cc b/src/heap/store-buffer.cc |
index a1968442541d166f33281e62644d1272d806200c..a5191dc748e34e944b015b52c67207c6ba537553 100644 |
--- a/src/heap/store-buffer.cc |
+++ b/src/heap/store-buffer.cc |
@@ -468,8 +468,16 @@ |
} |
} |
} else { |
- heap_->mark_compact_collector()->SweepOrWaitUntilSweepingCompleted( |
- page); |
+ if (!page->SweepingCompleted()) { |
+ heap_->mark_compact_collector()->SweepInParallel(page, owner); |
+ if (!page->SweepingCompleted()) { |
+ // We were not able to sweep that page, i.e., a concurrent |
+ // sweeper thread currently owns this page. Wait for the sweeper |
+ // thread to be done with this page. |
+ page->WaitUntilSweepingCompleted(); |
+ } |
+ } |
+ CHECK(page->owner() == heap_->old_space()); |
HeapObjectIterator iterator(page, NULL); |
for (HeapObject* heap_object = iterator.Next(); heap_object != NULL; |
heap_object = iterator.Next()) { |