Index: src/mark-compact.cc |
=================================================================== |
--- src/mark-compact.cc (revision 6377) |
+++ src/mark-compact.cc (working copy) |
@@ -33,6 +33,7 @@ |
#include "gdb-jit.h" |
#include "global-handles.h" |
#include "ic-inl.h" |
+#include "liveobjectlist-inl.h" |
#include "mark-compact.h" |
#include "objects-visiting.h" |
#include "stub-cache.h" |
@@ -1660,6 +1661,7 @@ |
free_start = current; |
is_prev_alive = false; |
} |
+ LiveObjectList::ProcessNonLive(object); |
} |
} |
@@ -1880,6 +1882,9 @@ |
size, |
false); |
} else { |
+ // Process the dead object before we write a NULL into its header. |
+ LiveObjectList::ProcessNonLive(object); |
+ |
size = object->Size(); |
Memory::Address_at(current) = NULL; |
} |
@@ -1899,6 +1904,7 @@ |
// Update roots. |
Heap::IterateRoots(&updating_visitor, VISIT_ALL_IN_SCAVENGE); |
+ LiveObjectList::IterateElements(&updating_visitor); |
// Update pointers in old spaces. |
Heap::IterateDirtyRegions(Heap::old_pointer_space(), |
@@ -1986,6 +1992,7 @@ |
free_start = current; |
is_previous_alive = false; |
} |
+ LiveObjectList::ProcessNonLive(object); |
} |
// The object is now unmarked for the call to Size() at the top of the |
// loop. |
@@ -2164,6 +2171,7 @@ |
void UpdateMapPointersInRoots() { |
Heap::IterateRoots(&map_updating_visitor_, VISIT_ONLY_STRONG); |
GlobalHandles::IterateWeakRoots(&map_updating_visitor_); |
+ LiveObjectList::IterateElements(&map_updating_visitor_); |
} |
void UpdateMapPointersInPagedSpace(PagedSpace* space) { |
@@ -2533,6 +2541,8 @@ |
// Update the pointer to the head of the weak list of global contexts. |
updating_visitor.VisitPointer(&Heap::global_contexts_list_); |
+ LiveObjectList::IterateElements(&updating_visitor); |
+ |
int live_maps_size = IterateLiveObjects(Heap::map_space(), |
&UpdatePointersInOldObject); |
int live_pointer_olds_size = IterateLiveObjects(Heap::old_pointer_space(), |