[pypy-svn] r51598 - in pypy/dist/pypy/module/_rawffi: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Feb 18 18:10:57 CET 2008
Author: fijal
Date: Mon Feb 18 18:10:57 2008
New Revision: 51598
Modified:
pypy/dist/pypy/module/_rawffi/callback.py
pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
pypy/dist/pypy/module/_rawffi/test/test_tracker.py
Log:
Tracing for callbacks.
Modified: pypy/dist/pypy/module/_rawffi/callback.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/callback.py (original)
+++ pypy/dist/pypy/module/_rawffi/callback.py Mon Feb 18 18:10:57 2008
@@ -9,6 +9,7 @@
from pypy.module._rawffi.interp_rawffi import W_DataInstance, _get_type_,\
wrap_value, unwrap_value, unwrap_truncate_int, letter2tp
from pypy.rlib.libffi import USERDATA_P, CallbackFuncPtr
+from pypy.module._rawffi.tracker import tracker
def callback(ll_args, ll_res, ll_userdata):
userdata = rffi.cast(USERDATA_P, ll_userdata)
@@ -52,9 +53,16 @@
self.ll_callback = CallbackFuncPtr(ffiargs, ffiresult,
callback, number)
self.ll_buffer = rffi.cast(rffi.VOIDP, self.ll_callback.ll_closure)
-
- #def free(self):
- # del self.global_counter.CallbackPtr_by_number[self.number]
+ if tracker.DO_TRACING:
+ addr = rffi.cast(rffi.INT, self.ll_callback.ll_closure)
+ tracker.trace_allocation(addr, self)
+
+ def free(self):
+ if tracker.DO_TRACING:
+ addr = rffi.cast(rffi.INT, self.ll_callback.ll_closure)
+ tracker.trace_free(addr)
+ del self.global_counter.CallbackPtr_by_number[self.number]
+ free.unwrap_spec = ['self']
def descr_new_callbackptr(space, w_type, w_callable, w_args, w_result):
return W_CallbackPtr(space, w_callable, w_args, w_result)
@@ -64,4 +72,5 @@
__new__ = interp2app(descr_new_callbackptr),
byptr = interp2app(W_CallbackPtr.byptr),
buffer = GetSetProperty(W_CallbackPtr.getbuffer),
+ free = interp2app(W_CallbackPtr.free),
)
Modified: pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/test/test__rawffi.py (original)
+++ pypy/dist/pypy/module/_rawffi/test/test__rawffi.py Mon Feb 18 18:10:57 2008
@@ -600,6 +600,3 @@
a.free()
raises(_rawffi.SegfaultException, a.__getitem__, 3)
raises(_rawffi.SegfaultException, a.__setitem__, 3, 3)
-
-
-
Modified: pypy/dist/pypy/module/_rawffi/test/test_tracker.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/test/test_tracker.py (original)
+++ pypy/dist/pypy/module/_rawffi/test/test_tracker.py Mon Feb 18 18:10:57 2008
@@ -24,6 +24,13 @@
s.free()
assert _rawffi._num_of_allocated_objects() == 0
+ def test_callback(self):
+ import _rawffi
+ c = _rawffi.CallbackPtr(lambda : 3, [], 'i')
+ assert _rawffi._num_of_allocated_objects() == 1
+ c.free()
+ assert _rawffi._num_of_allocated_objects() == 0
+
def teardown_class(cls):
Tracker.DO_TRACING = False
More information about the Pypy-commit
mailing list