[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