[pypy-svn] r76795 - pypy/branch/markcompact/pypy/rpython/memory/gc

arigo at codespeak.net arigo at codespeak.net
Sun Aug 29 19:39:16 CEST 2010


Author: arigo
Date: Sun Aug 29 19:39:14 2010
New Revision: 76795

Modified:
   pypy/branch/markcompact/pypy/rpython/memory/gc/markcompact.py
Log:
More debugging checks.  Useless so far.


Modified: pypy/branch/markcompact/pypy/rpython/memory/gc/markcompact.py
==============================================================================
--- pypy/branch/markcompact/pypy/rpython/memory/gc/markcompact.py	(original)
+++ pypy/branch/markcompact/pypy/rpython/memory/gc/markcompact.py	Sun Aug 29 19:39:14 2010
@@ -249,7 +249,7 @@
         # Walk all objects and assign forward pointers in the same order,
         # also updating all references
         #
-        finaladdr = self.update_forward_pointers(toaddr, maxnum)
+        self.update_forward_pointers(toaddr, maxnum)
         if (self.run_finalizers.non_empty() or
             self.objects_with_finalizers.non_empty()):
             self.update_run_finalizers()
@@ -258,14 +258,14 @@
         self.compact()
         #
         self.tid_backup = lltype.nullptr(TID_BACKUP)
-        self.free = finaladdr
-        self.next_collect_after = self.next_collection(finaladdr - toaddr,
+        self.free = self.finaladdr
+        self.next_collect_after = self.next_collection(self.finaladdr - toaddr,
                                                        self.num_alive_objs,
                                                        requested_size)
         #
         if not translated_to_c():
-            remaining_size = (toaddr + self.space_size) - finaladdr
-            llarena.arena_reset(finaladdr, remaining_size, False)
+            remaining_size = (toaddr + self.space_size) - self.finaladdr
+            llarena.arena_reset(self.finaladdr, remaining_size, False)
             llarena.arena_free(self.space)
             self.space = toaddr
         #
@@ -449,6 +449,7 @@
             if not translated_to_c():
                 assert toaddr - base_forwarding_addr <= fromaddr - self.space
         self.num_alive_objs = num
+        self.finaladdr = toaddr
 
         # now update references
         self.root_walker.walk_roots(
@@ -456,7 +457,6 @@
             MarkCompactGC._update_ref,  # static in prebuilt non-gc structures
             MarkCompactGC._update_ref)  # static in prebuilt gc objects
         self.walk_marked_objects(MarkCompactGC.trace_and_update_ref)
-        return toaddr
 
     def walk_marked_objects(self, callback):
         num = 0
@@ -561,8 +561,10 @@
         tid = self.header_forwarded(obj).tid
         ll_assert(tid & GCFLAG_MARKBIT != 0, "dying object is not forwarded")
         GCFLAG_MASK = ~(GCFLAG_MARKBIT | 3)
-        return (self.base_forwarding_addr + (tid & GCFLAG_MASK) +
-                self.gcheaderbuilder.size_gc_header)
+        res = (self.base_forwarding_addr + (tid & GCFLAG_MASK) +
+               self.gcheaderbuilder.size_gc_header)
+        ll_assert(res < self.finaladdr, "forwarded address >= self.finaladdr")
+        return res
 
     def surviving(self, obj):
         return self.marked(obj)



More information about the Pypy-commit mailing list