Old space cannot be assumed to be iterable between GCs, even if swept precisely.
authorjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 12 Aug 2014 15:29:03 +0000 (15:29 +0000)
committerjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 12 Aug 2014 15:29:03 +0000 (15:29 +0000)
This is because allocation folding can cause uninitialized and hence uniterable fragments. Trying to inspect them causes SizeFromMap() crashes.

R=hpayer@chromium.org

Review URL: https://codereview.chromium.org/467693002

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

src/heap/mark-compact.cc

index 4a11d3b082273cb5c2bfae0ed112e85315797825..abb4e1beb8e7e51936657e70d14dec33649a7faf 100644 (file)
@@ -2009,16 +2009,11 @@ int MarkCompactCollector::DiscoverAndEvacuateBlackObjectsOnPage(
 
 static void DiscoverGreyObjectsInSpace(Heap* heap, MarkingDeque* marking_deque,
                                        PagedSpace* space) {
-  if (space->swept_precisely()) {
-    HeapObjectIterator it(space);
-    DiscoverGreyObjectsWithIterator(heap, marking_deque, &it);
-  } else {
-    PageIterator it(space);
-    while (it.has_next()) {
-      Page* p = it.next();
-      DiscoverGreyObjectsOnPage(marking_deque, p);
-      if (marking_deque->IsFull()) return;
-    }
+  PageIterator it(space);
+  while (it.has_next()) {
+    Page* p = it.next();
+    DiscoverGreyObjectsOnPage(marking_deque, p);
+    if (marking_deque->IsFull()) return;
   }
 }