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

Skip to content

Commit 72bc456

Browse files
committed
Add weakref support generator-iterators.
Part of fixing SF bug #591704.
1 parent f16c3dc commit 72bc456

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

Python/ceval.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff 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

99102
static 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
120124
gen_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 */

0 commit comments

Comments
 (0)