[pypy-commit] pypy gc-minimark-pinning: Don't decrement 'pinned_objects_in_nursery' if the object is not pinned

arigo noreply at buildbot.pypy.org
Fri Apr 20 19:33:58 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: gc-minimark-pinning
Changeset: r54593:50b176a35634
Date: 2012-04-20 19:33 +0200
http://bitbucket.org/pypy/pypy/changeset/50b176a35634/

Log:	Don't decrement 'pinned_objects_in_nursery' if the object is not
	pinned (e.g. if a previous pin() failed).

diff --git a/pypy/rpython/memory/gc/minimark.py b/pypy/rpython/memory/gc/minimark.py
--- a/pypy/rpython/memory/gc/minimark.py
+++ b/pypy/rpython/memory/gc/minimark.py
@@ -810,8 +810,9 @@
         self.header(obj).tid |= GCFLAG_PINNED
 
     def unpin(self, obj):
-        self.pinned_objects_in_nursery -= 1
-        self.header(obj).tid &= ~GCFLAG_PINNED
+        if self.header(obj).tid & GCFLAG_PINNED:
+            self.pinned_objects_in_nursery -= 1
+            self.header(obj).tid &= ~GCFLAG_PINNED
 
     def shrink_array(self, obj, smallerlength):
         #


More information about the pypy-commit mailing list