File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+
127134static void
128135gen_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
134142static 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 */
You can’t perform that action at this time.
0 commit comments