[Python-checkins] r78383 - in python/branches/release31-maint: Lib/ctypes/test/test_callbacks.py Misc/NEWS Modules/_ctypes/callbacks.c
thomas.heller
python-checkins at python.org
Tue Feb 23 21:32:44 CET 2010
Author: thomas.heller
Date: Tue Feb 23 21:32:43 2010
New Revision: 78383
Log:
Merged revisions 78382 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r78382 | thomas.heller | 2010-02-23 21:25:02 +0100 (Di, 23 Feb 2010) | 11 lines
Merged revisions 78380 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78380 | thomas.heller | 2010-02-23 21:11:44 +0100 (Di, 23 Feb 2010) | 4 lines
ctypes CThunkObject was not registered correctly with the cycle
garbage collector, leading to possible leaks when using callback
functions.
........
................
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py
python/branches/release31-maint/Misc/NEWS
python/branches/release31-maint/Modules/_ctypes/callbacks.c
Modified: python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py
==============================================================================
--- python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py (original)
+++ python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py Tue Feb 23 21:32:43 2010
@@ -118,6 +118,22 @@
prototype = self.functype.__func__(object)
self.assertRaises(TypeError, prototype, lambda: None)
+ def test_issue_7959(self):
+ proto = self.functype.__func__(None)
+
+ class X(object):
+ def func(self): pass
+ def __init__(self):
+ self.v = proto(self.func)
+
+ import gc
+ for i in range(32):
+ X()
+ gc.collect()
+ live = [x for x in gc.get_objects()
+ if isinstance(x, X)]
+ self.assertEqual(len(live), 0)
+
try:
WINFUNCTYPE
except NameError:
Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS (original)
+++ python/branches/release31-maint/Misc/NEWS Tue Feb 23 21:32:43 2010
@@ -86,6 +86,9 @@
Library
-------
+- Issue #7959: ctypes callback functions are now registered correctly
+ with the cylce garbage collector.
+
- Issue #6666: fix bug in trace.py that applied the list of directories
to be ignored only to the first file. Noted by Bogdan Opanchuk.
Modified: python/branches/release31-maint/Modules/_ctypes/callbacks.c
==============================================================================
--- python/branches/release31-maint/Modules/_ctypes/callbacks.c (original)
+++ python/branches/release31-maint/Modules/_ctypes/callbacks.c Tue Feb 23 21:32:43 2010
@@ -18,7 +18,7 @@
Py_XDECREF(self->restype);
if (self->pcl)
_ctypes_free_closure(self->pcl);
- PyObject_Del(self);
+ PyObject_GC_Del(self);
}
static int
@@ -61,7 +61,7 @@
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
"CThunkObject", /* tp_doc */
CThunkObject_traverse, /* tp_traverse */
CThunkObject_clear, /* tp_clear */
@@ -364,7 +364,7 @@
CThunkObject *p;
int i;
- p = PyObject_NewVar(CThunkObject, &PyCThunk_Type, nArgs);
+ p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs);
if (p == NULL) {
PyErr_NoMemory();
return NULL;
@@ -379,6 +379,7 @@
for (i = 0; i < nArgs + 1; ++i)
p->atypes[i] = NULL;
+ PyObject_GC_Track((PyObject *)p);
return p;
}
More information about the Python-checkins
mailing list