mirror of
https://github.com/python/cpython.git
synced 2026-01-29 10:42:17 +00:00
gh-143939: Fix assignment to _PyThreadStateImpl.generator_return_kind (gh-143951)
The assignment to generator_return_kind has to be after any potentially escaping calls to ensure that it's not overwritten.
This commit is contained in:
parent
a126893fa8
commit
43bb6300b3
4 changed files with 23 additions and 1 deletions
|
|
@ -1914,7 +1914,6 @@ clear_gen_frame(PyThreadState *tstate, _PyInterpreterFrame * frame)
|
|||
assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
|
||||
PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame);
|
||||
FT_ATOMIC_STORE_INT8_RELEASE(gen->gi_frame_state, FRAME_CLEARED);
|
||||
((_PyThreadStateImpl *)tstate)->generator_return_kind = GENERATOR_RETURN;
|
||||
assert(tstate->exc_info == &gen->gi_exc_state);
|
||||
tstate->exc_info = gen->gi_exc_state.previous_item;
|
||||
gen->gi_exc_state.previous_item = NULL;
|
||||
|
|
@ -1922,6 +1921,9 @@ clear_gen_frame(PyThreadState *tstate, _PyInterpreterFrame * frame)
|
|||
frame->previous = NULL;
|
||||
_PyFrame_ClearExceptCode(frame);
|
||||
_PyErr_ClearExcState(&gen->gi_exc_state);
|
||||
// gh-143939: There must not be any escaping calls between setting
|
||||
// the generator return kind and returning from _PyEval_EvalFrame.
|
||||
((_PyThreadStateImpl *)tstate)->generator_return_kind = GENERATOR_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue