[pypy-commit] pypy gc-del: Lock

arigo noreply at buildbot.pypy.org
Thu Mar 7 10:07:20 CET 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: gc-del
Changeset: r62166:c7a41aeb7bd2
Date: 2013-03-04 17:38 +0100
http://bitbucket.org/pypy/pypy/changeset/c7a41aeb7bd2/

Log:	Lock

diff --git a/rpython/rlib/rgc.py b/rpython/rlib/rgc.py
--- a/rpython/rlib/rgc.py
+++ b/rpython/rlib/rgc.py
@@ -275,6 +275,7 @@
 
 _finalizer_queue = collections.deque()
 _finalizer_objects = weakref.WeakKeyDictionary()
+_finalizer_lock = [None]
 
 class _UntranslatedFinalizingObject(object):
     call_finalizer = None
@@ -327,14 +328,23 @@
 
 def progress_through_finalizer_queue():
     "NOT_RPYTHON"
+    try:
+        _finalizer_lock.pop()
+    except IndexError:   # list is already empty
+        return
     while _finalizer_queue:
         obj, func = _finalizer_queue.popleft()
         try:
             func(obj)
         except FinalizeLater:
             _finalizer_queue.appendleft((obj, func))
-            return False   # interrupted
-    return True   # completed
+            break
+        except Exception, e:
+            raise AssertionError("progress_through_finalizer_queue(): "
+                                 "%s raised %s: %s" % (func,
+                                                       e.__class__.__name__,
+                                                       e))
+    _finalizer_lock.append(None)
 
 class RegisterFinalizerEntry(ExtRegistryEntry):
     _about_ = register_finalizer


More information about the pypy-commit mailing list