[pypy-svn] r77011 - pypy/branch/gc-module/pypy/rpython/memory/gc
arigo at codespeak.net
arigo at codespeak.net
Sat Sep 11 10:54:35 CEST 2010
Author: arigo
Date: Sat Sep 11 10:54:34 2010
New Revision: 77011
Modified:
pypy/branch/gc-module/pypy/rpython/memory/gc/inspect.py
Log:
Fix.
Modified: pypy/branch/gc-module/pypy/rpython/memory/gc/inspect.py
==============================================================================
--- pypy/branch/gc-module/pypy/rpython/memory/gc/inspect.py (original)
+++ pypy/branch/gc-module/pypy/rpython/memory/gc/inspect.py Sat Sep 11 10:54:34 2010
@@ -146,6 +146,12 @@
self.flush()
write._always_inline_ = True
+ def write_marker(self):
+ self.write(0)
+ self.write(0)
+ self.write(0)
+ self.write(-1)
+
def writeobj(self, obj):
gc = self.gc
typeid = gc.get_type_id(obj)
@@ -172,15 +178,15 @@
_hd_add_root,
_hd_add_root)
self.gc._heap_dumper = None
- # a marker to mean "end of the roots"
- self.write(0)
- self.write(0)
- self.write(0)
- self.write(-1)
-
- def walk(self):
- while self.pending.non_empty():
- self.writeobj(self.pending.pop())
+ pendingroots = self.pending
+ self.pending = AddressStack()
+ self.walk(pendingroots)
+ pendingroots.delete()
+ self.write_marker()
+
+ def walk(self, pending):
+ while pending.non_empty():
+ self.writeobj(pending.pop())
def _hd_add_root(gc, root):
gc._heap_dumper.add(root.address[0])
@@ -188,6 +194,6 @@
def dump_rpy_heap(gc, fd):
heapdumper = HeapDumper(gc, fd)
heapdumper.add_roots()
- heapdumper.walk()
+ heapdumper.walk(heapdumper.pending)
heapdumper.flush()
heapdumper.delete()
More information about the Pypy-commit
mailing list