[pypy-commit] pypy gc-hooks: enable/disable the low-level hook according to the value of w_on_gc_minor

antocuni pypy.commits at gmail.com
Sat Mar 31 06:07:45 EDT 2018


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: gc-hooks
Changeset: r94196:91b33ec9b345
Date: 2018-03-31 12:06 +0200
http://bitbucket.org/pypy/pypy/changeset/91b33ec9b345/

Log:	enable/disable the low-level hook according to the value of
	w_on_gc_minor

diff --git a/pypy/module/gc/hook.py b/pypy/module/gc/hook.py
--- a/pypy/module/gc/hook.py
+++ b/pypy/module/gc/hook.py
@@ -9,6 +9,9 @@
         self.space = space
         self.hooks = space.fromcache(AppLevelHooks)
 
+    def is_gc_minor_enabled(self):
+        return self.hooks.gc_minor_enabled
+
     def on_gc_minor(self, total_memory_used, pinned_objects):
         action = self.hooks.gc_minor
         action.total_memory_used = total_memory_used
@@ -30,10 +33,11 @@
 
     def __init__(self, space):
         self.space = space
+        self.gc_minor_enabled = False
         self.gc_minor = GcMinorHookAction(space)
 
     def set_hooks(self, space, w_on_gc_minor):
-        # XXX: check for None and enable/disable accordingly
+        self.gc_minor_enabled = not space.is_none(w_on_gc_minor)
         self.gc_minor.w_callable = w_on_gc_minor
 
 
diff --git a/pypy/module/gc/test/test_hook.py b/pypy/module/gc/test/test_hook.py
--- a/pypy/module/gc/test/test_hook.py
+++ b/pypy/module/gc/test/test_hook.py
@@ -24,3 +24,10 @@
             (10, 20),
             (30, 40),
             ]
+        #
+        gc.set_hooks(on_gc_minor=None)
+        self.fire_gc_minor(50, 60)  # won't fire because the hooks is disabled
+        assert lst == [
+            (10, 20),
+            (30, 40),
+            ]


More information about the pypy-commit mailing list