[pypy-svn] r51434 - pypy/dist/pypy/lib/_ctypes
fijal at codespeak.net
fijal at codespeak.net
Wed Feb 13 13:39:40 CET 2008
Author: fijal
Date: Wed Feb 13 13:39:39 2008
New Revision: 51434
Modified:
pypy/dist/pypy/lib/_ctypes/pointer.py
pypy/dist/pypy/lib/_ctypes/primitive.py
Log:
__del__ for primitive values, pointers keep alive stuff they reference.
Modified: pypy/dist/pypy/lib/_ctypes/pointer.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/pointer.py (original)
+++ pypy/dist/pypy/lib/_ctypes/pointer.py Wed Feb 13 13:39:39 2008
@@ -55,6 +55,7 @@
ffiarray = _rawffi.Array('P')
def __init__(self, value=None):
self._buffer = ffiarray(1)
+ self._objects = [value] # keepalive value
if value is not None:
self.contents = value
self._ffiarray = ffiarray
Modified: pypy/dist/pypy/lib/_ctypes/primitive.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/primitive.py (original)
+++ pypy/dist/pypy/lib/_ctypes/primitive.py Wed Feb 13 13:39:39 2008
@@ -194,8 +194,10 @@
class _SimpleCData(_CData):
__metaclass__ = SimpleType
_type_ = 'i'
+ _needs_free = False
def __init__(self, value=DEFAULT_VALUE):
+ self._needs_free = True
self._buffer = self._ffiarray(1)
if value is not DEFAULT_VALUE:
self.value = value
@@ -216,3 +218,9 @@
def __nonzero__(self):
return self._buffer[0] not in (0, '\x00')
+
+ def __del__(self):
+ if self._needs_free:
+ self._needs_free = False
+ self._buffer.free()
+ self._buffer = None
More information about the Pypy-commit
mailing list