| Index: src/spaces.cc
|
| diff --git a/src/spaces.cc b/src/spaces.cc
|
| index 1a2be4a9d969735fa097ea297d871c00b6870f68..c91de47c1cda473ca06a51dab3252b23005c90a7 100644
|
| --- a/src/spaces.cc
|
| +++ b/src/spaces.cc
|
| @@ -436,6 +436,7 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap,
|
| chunk->size_ = size;
|
| chunk->flags_ = 0;
|
| chunk->set_owner(owner);
|
| + chunk->slots_buffer_ = NULL;
|
| Bitmap::Clear(chunk);
|
| chunk->initialize_scan_on_scavenge(false);
|
|
|
| @@ -1979,7 +1980,7 @@ void PagedSpace::PrepareForMarkCompact() {
|
| PageIterator it(this);
|
| while (it.has_next()) {
|
| Page* page = it.next();
|
| - page->ClearFlag(MemoryChunk::EVACUATED);
|
| + page->ClearSwept();
|
| }
|
| }
|
|
|
| @@ -2023,7 +2024,9 @@ bool PagedSpace::AdvanceSweeper(intptr_t bytes_to_sweep) {
|
| do {
|
| Page* next_page = p->next_page();
|
| // Evacuation candidates were swept by evacuator.
|
| - if (!p->IsEvacuationCandidate() && !p->WasEvacuated()) {
|
| + if (!p->IsEvacuationCandidate() &&
|
| + !p->IsFlagSet(Page::RESCAN_ON_EVACUATION) &&
|
| + !p->WasSwept()) {
|
| freed_bytes += MarkCompactCollector::SweepConservatively(this, p);
|
| }
|
| p = next_page;
|
|
|