Re-enable GC of method objects.

This commit is contained in:
Neil Schemenauer 2002-03-18 20:44:53 +00:00
parent dbf409fbfc
commit d91eec9df3

View file

@ -15,14 +15,14 @@ PyCFunction_New(PyMethodDef *ml, PyObject *self)
PyObject_INIT(op, &PyCFunction_Type); PyObject_INIT(op, &PyCFunction_Type);
} }
else { else {
op = PyObject_NEW(PyCFunctionObject, &PyCFunction_Type); op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
if (op == NULL) if (op == NULL)
return NULL; return NULL;
} }
op->m_ml = ml; op->m_ml = ml;
Py_XINCREF(self); Py_XINCREF(self);
op->m_self = self; op->m_self = self;
PyObject_GC_Init(op); _PyObject_GC_TRACK(op);
return (PyObject *)op; return (PyObject *)op;
} }
@ -111,7 +111,7 @@ PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw)
static void static void
meth_dealloc(PyCFunctionObject *m) meth_dealloc(PyCFunctionObject *m)
{ {
PyObject_GC_Fini(m); _PyObject_GC_UNTRACK(m);
Py_XDECREF(m->m_self); Py_XDECREF(m->m_self);
m->m_self = (PyObject *)free_list; m->m_self = (PyObject *)free_list;
free_list = m; free_list = m;
@ -216,7 +216,7 @@ PyTypeObject PyCFunction_Type = {
PyObject_HEAD_INIT(&PyType_Type) PyObject_HEAD_INIT(&PyType_Type)
0, 0,
"builtin_function_or_method", "builtin_function_or_method",
sizeof(PyCFunctionObject) + PyGC_HEAD_SIZE, sizeof(PyCFunctionObject),
0, 0,
(destructor)meth_dealloc, /* tp_dealloc */ (destructor)meth_dealloc, /* tp_dealloc */
0, /* tp_print */ 0, /* tp_print */
@ -233,7 +233,7 @@ PyTypeObject PyCFunction_Type = {
PyObject_GenericGetAttr, /* tp_getattro */ PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
0, /* tp_doc */ 0, /* tp_doc */
(traverseproc)meth_traverse, /* tp_traverse */ (traverseproc)meth_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
@ -327,7 +327,6 @@ PyCFunction_Fini(void)
while (free_list) { while (free_list) {
PyCFunctionObject *v = free_list; PyCFunctionObject *v = free_list;
free_list = (PyCFunctionObject *)(v->m_self); free_list = (PyCFunctionObject *)(v->m_self);
v = (PyCFunctionObject *) PyObject_AS_GC(v); PyObject_GC_Del(v);
PyObject_DEL(v);
} }
} }