[pypy-svn] r53597 - in pypy/dist/pypy/module/gc: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Apr 8 22:48:42 CEST 2008
Author: arigo
Date: Tue Apr 8 22:48:41 2008
New Revision: 53597
Modified:
pypy/dist/pypy/module/gc/__init__.py
pypy/dist/pypy/module/gc/app_gc.py
pypy/dist/pypy/module/gc/interp_gc.py
pypy/dist/pypy/module/gc/test/test_gc.py
Log:
App-level interface to {disable,enable}_finalizers().
Modified: pypy/dist/pypy/module/gc/__init__.py
==============================================================================
--- pypy/dist/pypy/module/gc/__init__.py (original)
+++ pypy/dist/pypy/module/gc/__init__.py Tue Apr 8 22:48:41 2008
@@ -8,5 +8,7 @@
}
interpleveldefs = {
'collect': 'interp_gc.collect',
+ 'enable_finalizers': 'interp_gc.enable_finalizers',
+ 'disable_finalizers': 'interp_gc.disable_finalizers',
'estimate_heap_size': 'interp_gc.estimate_heap_size',
}
Modified: pypy/dist/pypy/module/gc/app_gc.py
==============================================================================
--- pypy/dist/pypy/module/gc/app_gc.py (original)
+++ pypy/dist/pypy/module/gc/app_gc.py Tue Apr 8 22:48:41 2008
@@ -1,6 +1,6 @@
def isenabled():
- "Not implemented."
+ return True
def enable():
"Not implemented."
Modified: pypy/dist/pypy/module/gc/interp_gc.py
==============================================================================
--- pypy/dist/pypy/module/gc/interp_gc.py (original)
+++ pypy/dist/pypy/module/gc/interp_gc.py Tue Apr 8 22:48:41 2008
@@ -1,14 +1,36 @@
from pypy.interpreter.gateway import ObjSpace
from pypy.interpreter.error import OperationError
-from pypy.rlib import rgc # Force registration of gc.collect
-import gc
+from pypy.rlib import rgc
def collect(space):
"Run a full collection."
- gc.collect()
+ rgc.collect()
collect.unwrap_spec = [ObjSpace]
+class State:
+ def __init__(self, space):
+ self.finalizers_lock_count = 0
+def getstate(space):
+ return space.fromcache(State)
+
+def enable_finalizers(space):
+ state = getstate(space)
+ if state.finalizers_lock_count == 0:
+ raise OperationError(space.w_ValueError,
+ space.wrap("finalizers are already enabled"))
+ state.finalizers_lock_count -= 1
+ rgc.enable_finalizers()
+enable_finalizers.unwrap_spec = [ObjSpace]
+
+def disable_finalizers(space):
+ state = getstate(space)
+ rgc.disable_finalizers()
+ state.finalizers_lock_count += 1
+disable_finalizers.unwrap_spec = [ObjSpace]
+
+# ____________________________________________________________
+
import sys
platform = sys.platform
Modified: pypy/dist/pypy/module/gc/test/test_gc.py
==============================================================================
--- pypy/dist/pypy/module/gc/test/test_gc.py (original)
+++ pypy/dist/pypy/module/gc/test/test_gc.py Tue Apr 8 22:48:41 2008
@@ -3,6 +3,20 @@
import gc
gc.collect() # mostly a "does not crash" kind of test
+ def test_disable_finalizers(self):
+ # on top of PyPy we can't easily test this, except by using
+ # obsure hacks, so for now we'll live with a "does not crash"
+ # kind of test
+ import gc
+ gc.disable_finalizers()
+ gc.enable_finalizers()
+ # we can test that nesting appears to work
+ gc.disable_finalizers()
+ gc.disable_finalizers()
+ gc.enable_finalizers()
+ gc.enable_finalizers()
+ raises(ValueError, gc.enable_finalizers)
+
def test_estimate_heap_size(self):
import sys, gc
if sys.platform == "linux2":
More information about the Pypy-commit
mailing list