summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2010-02-23 20:25:02 (GMT)
committerThomas Heller <theller@ctypes.org>2010-02-23 20:25:02 (GMT)
commit5117b0b0dc9c28d158c9f46bca0965ee00ac98e7 (patch)
treea703ea4de31700fedeea0ecd783525f8214e101f /Modules
parentb7be5703fbf2b847d566952441aacd04ee52e370 (diff)
downloadcpython-5117b0b0dc9c28d158c9f46bca0965ee00ac98e7.zip
cpython-5117b0b0dc9c28d158c9f46bca0965ee00ac98e7.tar.gz
cpython-5117b0b0dc9c28d158c9f46bca0965ee00ac98e7.tar.bz2
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. ........
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_ctypes/callbacks.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 6e44080..5cf0441 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -18,7 +18,7 @@ CThunkObject_dealloc(PyObject *_self)
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 @@ PyTypeObject PyCThunk_Type = {
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 */
@@ -332,7 +332,7 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs)
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;
@@ -347,6 +347,7 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs)
for (i = 0; i < nArgs + 1; ++i)
p->atypes[i] = NULL;
+ PyObject_GC_Track((PyObject *)p);
return p;
}