[3.12] gh-118272: Clear generator frame's locals when the generator is closed (#118451)

This commit is contained in:
Irit Katriel 2024-05-02 16:22:50 +01:00 committed by GitHub
parent f61de0de64
commit 238efbecab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 39 additions and 5 deletions

View file

@ -115,6 +115,18 @@ take_ownership(PyFrameObject *f, _PyInterpreterFrame *frame)
}
}
void
_PyFrame_ClearLocals(_PyInterpreterFrame *frame)
{
assert(frame->stacktop >= 0);
int stacktop = frame->stacktop;
frame->stacktop = 0;
for (int i = 0; i < stacktop; i++) {
Py_XDECREF(frame->localsplus[i]);
}
Py_CLEAR(frame->f_locals);
}
void
_PyFrame_ClearExceptCode(_PyInterpreterFrame *frame)
{
@ -135,12 +147,8 @@ _PyFrame_ClearExceptCode(_PyInterpreterFrame *frame)
}
Py_DECREF(f);
}
assert(frame->stacktop >= 0);
for (int i = 0; i < frame->stacktop; i++) {
Py_XDECREF(frame->localsplus[i]);
}
_PyFrame_ClearLocals(frame);
Py_XDECREF(frame->frame_obj);
Py_XDECREF(frame->f_locals);
Py_DECREF(frame->f_funcobj);
}