| 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()) {
|
|
|