[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