[pypy-svn] pypy jitypes2: try hard to delete all the references to _FuncPtrs before checking for memory leaks. In the old version of _ctypes this was not a problem because some buffers were allocated directly inside _rawffi, and thus not tracked as "allocated objects".
antocuni
commits-noreply at bitbucket.org
Fri Jan 7 10:03:34 CET 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: jitypes2
Changeset: r40435:05b331e5c9bf
Date: 2011-01-05 17:50 +0100
http://bitbucket.org/pypy/pypy/changeset/05b331e5c9bf/
Log: try hard to delete all the references to _FuncPtrs before checking
for memory leaks. In the old version of _ctypes this was not a
problem because some buffers were allocated directly inside _rawffi,
and thus not tracked as "allocated objects".
diff --git a/pypy/module/test_lib_pypy/ctypes_tests/support.py b/pypy/module/test_lib_pypy/ctypes_tests/support.py
--- a/pypy/module/test_lib_pypy/ctypes_tests/support.py
+++ b/pypy/module/test_lib_pypy/ctypes_tests/support.py
@@ -15,6 +15,16 @@
if _rawffi:
py.test.skip("white-box tests for pypy _rawffi based ctypes impl")
+def del_funcptr_refs_maybe(obj, attrname):
+ dll = getattr(obj, attrname, None)
+ if not dll:
+ return
+ _FuncPtr = dll._FuncPtr
+ for name in dir(dll):
+ obj = getattr(dll, name, None)
+ if isinstance(obj, _FuncPtr):
+ delattr(dll, name)
+
class BaseCTypesTestChecker:
def setup_class(cls):
if _rawffi:
@@ -22,11 +32,18 @@
for _ in range(4):
gc.collect()
cls.old_num = _rawffi._num_of_allocated_objects()
-
+
+
def teardown_class(cls):
if sys.pypy_translation_info['translation.gc'] == 'boehm':
return # it seems that boehm has problems with __del__, so not
# everything is freed
+ #
+ mod = sys.modules[cls.__module__]
+ del_funcptr_refs_maybe(mod, 'dll')
+ del_funcptr_refs_maybe(mod, 'lib')
+ del_funcptr_refs_maybe(cls, '_dll')
+ #
if hasattr(cls, 'old_num'):
import gc
for _ in range(4):
diff --git a/pypy/module/test_lib_pypy/ctypes_tests/test_unicode.py b/pypy/module/test_lib_pypy/ctypes_tests/test_unicode.py
--- a/pypy/module/test_lib_pypy/ctypes_tests/test_unicode.py
+++ b/pypy/module/test_lib_pypy/ctypes_tests/test_unicode.py
@@ -15,6 +15,10 @@
mod.wcslen.argtypes = [ctypes.c_wchar_p]
mod.func = dll._testfunc_p_p
+ def teardown_module(mod):
+ del mod.func
+ del mod.wcslen
+
class TestUnicode(BaseCTypesTestChecker):
def setup_method(self, method):
self.prev_conv_mode = ctypes.set_conversion_mode("ascii", "strict")
More information about the Pypy-commit
mailing list