[pypy-commit] pypy gc-incminimark-pinning: create a new AddressStack only if needed

groggi noreply at buildbot.pypy.org
Mon Aug 18 09:55:18 CEST 2014


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning
Changeset: r72866:e9322b528a2c
Date: 2014-08-18 09:54 +0200
http://bitbucket.org/pypy/pypy/changeset/e9322b528a2c/

Log:	create a new AddressStack only if needed

diff --git a/rpython/memory/gc/incminimark.py b/rpython/memory/gc/incminimark.py
--- a/rpython/memory/gc/incminimark.py
+++ b/rpython/memory/gc/incminimark.py
@@ -2124,12 +2124,13 @@
                 #
                 # get rid of objects pointing to pinned objects that were not
                 # visited
-                new_old_objects_pointing_to_pinned = self.AddressStack()
-                self.old_objects_pointing_to_pinned.foreach(
-                        self._sweep_old_objects_pointing_to_pinned,
-                        new_old_objects_pointing_to_pinned)
-                self.old_objects_pointing_to_pinned.delete()
-                self.old_objects_pointing_to_pinned = new_old_objects_pointing_to_pinned
+                if self.old_objects_pointing_to_pinned.non_empty():
+                    new_old_objects_pointing_to_pinned = self.AddressStack()
+                    self.old_objects_pointing_to_pinned.foreach(
+                            self._sweep_old_objects_pointing_to_pinned,
+                            new_old_objects_pointing_to_pinned)
+                    self.old_objects_pointing_to_pinned.delete()
+                    self.old_objects_pointing_to_pinned = new_old_objects_pointing_to_pinned
                 self.gc_state = STATE_SWEEPING
             #END MARKING
         elif self.gc_state == STATE_SWEEPING:


More information about the pypy-commit mailing list