[pypy-svn] r68741 - in pypy/branch/gc-dump-heap/pypy: rlib rpython/lltypesystem rpython/memory/gc rpython/memory/gctransform rpython/memory/test

fijal at codespeak.net fijal at codespeak.net
Mon Oct 26 09:58:29 CET 2009


Author: fijal
Date: Mon Oct 26 09:58:27 2009
New Revision: 68741

Modified:
   pypy/branch/gc-dump-heap/pypy/rlib/rgc.py
   pypy/branch/gc-dump-heap/pypy/rpython/lltypesystem/lloperation.py
   pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/base.py
   pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/semispace.py
   pypy/branch/gc-dump-heap/pypy/rpython/memory/gctransform/framework.py
   pypy/branch/gc-dump-heap/pypy/rpython/memory/test/test_transformed_gc.py
Log:
Kill ugly raw malloc & free, instead say that dump_heap can unwind
the gc (which should not be a problem, usually you want to collect first
anyway).


Modified: pypy/branch/gc-dump-heap/pypy/rlib/rgc.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rlib/rgc.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rlib/rgc.py	Mon Oct 26 09:58:27 2009
@@ -192,13 +192,6 @@
         next = tb[i]
         os.write(fd, str(next.count) + " " + ",".join([
             str(next.links[j]) for j in range(len(tb))]) + "\n")
-    _clear_dump_heap(tb)
-
-def _clear_dump_heap(tb):
-    from pypy.rpython.lltypesystem import lltype
-    for i in range(len(tb)):
-        lltype.free(tb[i].links, flavor='raw')
-    lltype.free(tb, flavor='raw')
 
 def _dump_heap():
     raise NotImplementedError # can't be run directly
@@ -216,7 +209,7 @@
         from pypy.rpython.lltypesystem import lltype
         from pypy.rpython.memory.gc.base import ARRAY_TYPEID_MAP
         from pypy.rpython.lltypesystem import lltype
-        hop.exception_cannot_occur()
+        hop.exception_is_here()
         return hop.genop('gc_dump_heap', [], resulttype=hop.r_result)
 
 def malloc_nonmovable(TP, n=None, zero=False):

Modified: pypy/branch/gc-dump-heap/pypy/rpython/lltypesystem/lloperation.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rpython/lltypesystem/lloperation.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rpython/lltypesystem/lloperation.py	Mon Oct 26 09:58:27 2009
@@ -460,7 +460,7 @@
     'gc_thread_run'       : LLOp(),
     'gc_thread_die'       : LLOp(),
     'gc_assume_young_pointers': LLOp(),
-    'gc_dump_heap'        : LLOp(),
+    'gc_dump_heap'        : LLOp(canunwindgc=True),
 
     # ------- JIT & GC interaction, only for some GCs ----------
     

Modified: pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/base.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/base.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/base.py	Mon Oct 26 09:58:27 2009
@@ -6,9 +6,9 @@
 from pypy.rpython.memory.support import AddressDict
 from pypy.rpython.lltypesystem.llmemory import NULL, raw_malloc_usage
 
-TYPEID_MAP = lltype.Struct('TYPEID_MAP', ('count', lltype.Signed),
+TYPEID_MAP = lltype.GcStruct('TYPEID_MAP', ('count', lltype.Signed),
                            ('links', lltype.Array(lltype.Signed)))
-ARRAY_TYPEID_MAP = lltype.Array(lltype.Ptr(TYPEID_MAP))
+ARRAY_TYPEID_MAP = lltype.GcArray(lltype.Ptr(TYPEID_MAP))
 
 class GCBase(object):
     _alloc_flavor_ = "raw"

Modified: pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/semispace.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/semispace.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rpython/memory/gc/semispace.py	Mon Oct 26 09:58:27 2009
@@ -653,18 +653,9 @@
 
     def dump_heap(self):
         max_tid = self.root_walker.gcdata.max_type_id
-        ll_typeid_map = lltype.malloc(ARRAY_TYPEID_MAP, max_tid,
-                                        flavor='raw')
-        i = 0
-        while i < max_tid:
-            ll_typeid_map[i] = lltype.malloc(TYPEID_MAP, max_tid,
-                                             flavor='raw')
-            ll_typeid_map[i].count = 0
-            j = 0
-            while j < max_tid:
-                ll_typeid_map[i].links[j] = 0
-                j += 1
-            i += 1
+        ll_typeid_map = lltype.malloc(ARRAY_TYPEID_MAP, max_tid, zero=True)
+        for i in range(max_tid):
+            ll_typeid_map[i] = lltype.malloc(TYPEID_MAP, max_tid, zero=True)
         self._ll_typeid_map = ll_typeid_map
         self.root_walker.walk_roots(
             SemiSpaceGC._dump_heap,  # stack roots

Modified: pypy/branch/gc-dump-heap/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rpython/memory/gctransform/framework.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rpython/memory/gctransform/framework.py	Mon Oct 26 09:58:27 2009
@@ -273,7 +273,8 @@
 
         if hasattr(GCClass, 'dump_heap'):
             self.dump_heap_ptr = getfn(GCClass.dump_heap.im_func,
-                    [s_gc], annmodel.SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP)))
+                    [s_gc], annmodel.SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP)),
+                    minimal_transform=False)
             self.get_member_index_ptr = getfn(
                 GCClass.get_member_index.im_func,
                 [s_gc, annmodel.SomeInteger(knowntype=rffi.r_ushort)],

Modified: pypy/branch/gc-dump-heap/pypy/rpython/memory/test/test_transformed_gc.py
==============================================================================
--- pypy/branch/gc-dump-heap/pypy/rpython/memory/test/test_transformed_gc.py	(original)
+++ pypy/branch/gc-dump-heap/pypy/rpython/memory/test/test_transformed_gc.py	Mon Oct 26 09:58:27 2009
@@ -819,7 +819,6 @@
                 if tb[i].count == 1:
                     b += 1
                     c = tb[i].links[nr]
-            rgc._clear_dump_heap(tb)
             return c * 100 + b * 10 + a
         return f
 



More information about the Pypy-commit mailing list