Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f8c7c20

Browse files
committed
GC for generator objects.
1 parent 10c6692 commit f8c7c20

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

Python/ceval.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,22 @@ gen_new(PyFrameObject *f)
121121
}
122122
gen->gi_frame = f;
123123
gen->gi_running = 0;
124+
PyObject_GC_Init(gen);
124125
return (PyObject *)gen;
125126
}
126127

128+
static int
129+
gen_traverse(genobject *gen, visitproc visit, void *arg)
130+
{
131+
return visit((PyObject *)gen->gi_frame, arg);
132+
}
133+
127134
static void
128135
gen_dealloc(genobject *gen)
129136
{
137+
PyObject_GC_Fini(gen);
130138
Py_DECREF(gen->gi_frame);
131-
PyObject_DEL(gen);
139+
PyObject_Del(gen);
132140
}
133141

134142
static PyObject *
@@ -226,7 +234,7 @@ statichere PyTypeObject gentype = {
226234
PyObject_HEAD_INIT(&PyType_Type)
227235
0, /* ob_size */
228236
"generator", /* tp_name */
229-
sizeof(genobject), /* tp_basicsize */
237+
sizeof(genobject) + PyGC_HEAD_SIZE, /* tp_basicsize */
230238
0, /* tp_itemsize */
231239
/* methods */
232240
(destructor)gen_dealloc, /* tp_dealloc */
@@ -244,9 +252,9 @@ statichere PyTypeObject gentype = {
244252
0, /* tp_getattro */
245253
0, /* tp_setattro */
246254
0, /* tp_as_buffer */
247-
Py_TPFLAGS_DEFAULT, /* tp_flags */
255+
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */
248256
0, /* tp_doc */
249-
0, /* tp_traverse */
257+
(traverseproc)gen_traverse, /* tp_traverse */
250258
0, /* tp_clear */
251259
0, /* tp_richcompare */
252260
0, /* tp_weaklistoffset */

0 commit comments

Comments
 (0)