Fix slot buffers of abandoned evacuation candidates.
authormstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 27 Sep 2011 13:35:04 +0000 (13:35 +0000)
committermstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 27 Sep 2011 13:35:04 +0000 (13:35 +0000)
R=vegorov@chromium.org
BUG=v8:1734
TEST=cctest/test-mark-compact/NoPromotion

Review URL: http://codereview.chromium.org/8051014

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9454 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/mark-compact.cc

index 956d0c9..948a6be 100644 (file)
@@ -2690,8 +2690,10 @@ void MarkCompactCollector::EvacuatePages() {
         // Without room for expansion evacuation is not guaranteed to succeed.
         // Pessimistically abandon unevacuated pages.
         for (int j = i; j < npages; j++) {
-          evacuation_candidates_[j]->ClearEvacuationCandidate();
-          evacuation_candidates_[j]->SetFlag(Page::RESCAN_ON_EVACUATION);
+          Page* page = evacuation_candidates_[j];
+          slots_buffer_allocator_.DeallocateChain(page->slots_buffer_address());
+          page->ClearEvacuationCandidate();
+          page->SetFlag(Page::RESCAN_ON_EVACUATION);
         }
         return;
       }