Commit 08de92a2 authored by Neil Schemenauer's avatar Neil Schemenauer

Re-enable GC of generator objects.

parent d91eec9d
...@@ -100,14 +100,14 @@ typedef struct { ...@@ -100,14 +100,14 @@ typedef struct {
static PyObject * static PyObject *
gen_new(PyFrameObject *f) gen_new(PyFrameObject *f)
{ {
genobject *gen = PyObject_New(genobject, &gentype); genobject *gen = PyObject_GC_New(genobject, &gentype);
if (gen == NULL) { if (gen == NULL) {
Py_DECREF(f); Py_DECREF(f);
return NULL; return NULL;
} }
gen->gi_frame = f; gen->gi_frame = f;
gen->gi_running = 0; gen->gi_running = 0;
PyObject_GC_Init(gen); _PyObject_GC_TRACK(gen);
return (PyObject *)gen; return (PyObject *)gen;
} }
...@@ -120,9 +120,9 @@ gen_traverse(genobject *gen, visitproc visit, void *arg) ...@@ -120,9 +120,9 @@ gen_traverse(genobject *gen, visitproc visit, void *arg)
static void static void
gen_dealloc(genobject *gen) gen_dealloc(genobject *gen)
{ {
PyObject_GC_Fini(gen); _PyObject_GC_UNTRACK(gen);
Py_DECREF(gen->gi_frame); Py_DECREF(gen->gi_frame);
PyObject_Del(gen); PyObject_GC_Del(gen);
} }
static PyObject * static PyObject *
...@@ -204,7 +204,7 @@ statichere PyTypeObject gentype = { ...@@ -204,7 +204,7 @@ statichere PyTypeObject gentype = {
PyObject_HEAD_INIT(&PyType_Type) PyObject_HEAD_INIT(&PyType_Type)
0, /* ob_size */ 0, /* ob_size */
"generator", /* tp_name */ "generator", /* tp_name */
sizeof(genobject) + PyGC_HEAD_SIZE, /* tp_basicsize */ sizeof(genobject), /* tp_basicsize */
0, /* tp_itemsize */ 0, /* tp_itemsize */
/* methods */ /* methods */
(destructor)gen_dealloc, /* tp_dealloc */ (destructor)gen_dealloc, /* tp_dealloc */
...@@ -222,7 +222,7 @@ statichere PyTypeObject gentype = { ...@@ -222,7 +222,7 @@ statichere PyTypeObject gentype = {
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)gen_traverse, /* tp_traverse */ (traverseproc)gen_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment