File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -94,6 +94,9 @@ typedef struct {
9494
9595 /* True if generator is being executed. */
9696 int gi_running ;
97+
98+ /* List of weak reference. */
99+ PyObject * gi_weakreflist ;
97100} genobject ;
98101
99102static PyObject *
@@ -106,6 +109,7 @@ gen_new(PyFrameObject *f)
106109 }
107110 gen -> gi_frame = f ;
108111 gen -> gi_running = 0 ;
112+ gen -> gi_weakreflist = NULL ;
109113 _PyObject_GC_TRACK (gen );
110114 return (PyObject * )gen ;
111115}
@@ -120,6 +124,8 @@ static void
120124gen_dealloc (genobject * gen )
121125{
122126 _PyObject_GC_UNTRACK (gen );
127+ if (gen -> gi_weakreflist != NULL )
128+ PyObject_ClearWeakRefs ((PyObject * ) gen );
123129 Py_DECREF (gen -> gi_frame );
124130 PyObject_GC_Del (gen );
125131}
@@ -205,7 +211,7 @@ static PyTypeObject gentype = {
205211 (traverseproc )gen_traverse , /* tp_traverse */
206212 0 , /* tp_clear */
207213 0 , /* tp_richcompare */
208- 0 , /* tp_weaklistoffset */
214+ offsetof( genobject , gi_weakreflist ), /* tp_weaklistoffset */
209215 (getiterfunc )gen_getiter , /* tp_iter */
210216 (iternextfunc )gen_iternext , /* tp_iternext */
211217 0 , /* tp_methods */
You can’t perform that action at this time.
0 commit comments