[pypy-commit] pypy default: Tweak gc.collect() when gc.disable() was called, see comment

arigo pypy.commits at gmail.com
Thu Dec 1 11:23:03 EST 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r88794:2aa7dea5ad0f
Date: 2016-12-01 17:21 +0100
http://bitbucket.org/pypy/pypy/changeset/2aa7dea5ad0f/

Log:	Tweak gc.collect() when gc.disable() was called, see comment

diff --git a/pypy/module/gc/interp_gc.py b/pypy/module/gc/interp_gc.py
--- a/pypy/module/gc/interp_gc.py
+++ b/pypy/module/gc/interp_gc.py
@@ -14,7 +14,19 @@
     cache.clear()
     cache = space.fromcache(MapAttrCache)
     cache.clear()
+
     rgc.collect()
+
+    # if we are running in gc.disable() mode but gc.collect() is called,
+    # we should still call the finalizers now.  We do this as an attempt
+    # to get closer to CPython's behavior: in Py3.5 some tests
+    # specifically rely on that.  This is similar to how, in CPython, an
+    # explicit gc.collect() will invoke finalizers from cycles and fully
+    # ignore the gc.disable() mode.
+    if not space.user_del_action.enabled_at_app_level:
+        enable_finalizers(space)
+        disable_finalizers(space)
+
     return space.wrap(0)
 
 def enable(space):


More information about the pypy-commit mailing list