Reviewers: Mads Ager,
Description:
Add an additional sweeping pass over old space pages
Add an additional sweeping pass over old space pages to nullify all pointers
which satisfy the Heap::InNewSpace() predicate.
Please review this at http://codereview.chromium.org/2463003/show
Affected files:
M src/heap.cc
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index
79aced7d4d33c90a8df1fcae98b16e870d60df62..038d189cdb44fc91abcd73ddbf91e6f3842006cb
100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -3444,7 +3444,6 @@ static bool IteratePointersInDirtyMaps(Address start,
while (map_address < end) {
ASSERT(!Heap::InNewSpace(Memory::Object_at(map_address)));
- ASSERT(Memory::Object_at(map_address)->IsMap());
Address pointer_fields_start = map_address +
Map::kPointerFieldsBeginOffset;
Address pointer_fields_end = map_address +
Map::kPointerFieldsEndOffset;
@@ -3473,7 +3472,6 @@ bool Heap::IteratePointersInDirtyMapsRegion(
if (map_aligned_start != start) {
Address prev_map = map_aligned_start - Map::kSize;
- ASSERT(Memory::Object_at(prev_map)->IsMap());
Address pointer_fields_start =
Max(start, prev_map + Map::kPointerFieldsBeginOffset);
@@ -3495,8 +3493,6 @@ bool Heap::IteratePointersInDirtyMapsRegion(
|| contains_pointers_to_new_space;
if (map_aligned_end != end) {
- ASSERT(Memory::Object_at(map_aligned_end)->IsMap());
-
Address pointer_fields_start = map_aligned_end + Map::kPrototypeOffset;
Address pointer_fields_end =
@@ -3603,6 +3599,10 @@ uint32_t Heap::IterateDirtyRegions(
}
+static void NullifyPointer(HeapObject** p) {
+ *p = NULL;
+}
+
void Heap::IterateDirtyRegions(
PagedSpace* space,
@@ -3639,6 +3639,15 @@ void Heap::IterateDirtyRegions(
end,
visit_dirty_region,
copy_object_func));
+
+ // Do a sweeping pass over all regions marked clean.
+ // Nullify all pointer aligned words that satisfy the
+ // Heap::InNewSpace() predicate.
+ IterateDirtyRegions(~page->GetRegionMarks(),
+ page->ObjectAreaStart(),
+ space->PageAllocationLimit(page),
+ visit_dirty_region,
+ &NullifyPointer);
}
// Mark page watermark as invalid to maintain watermark validity
invariant.
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev