[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