mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
[3.11] GH-93252: Fix error handling for failed Python calls (GH-94693) (GH-94708)
Automerge-Triggered-By: GH:tiran
This commit is contained in:
parent
b4e232c4b5
commit
7a341724e4
3 changed files with 19 additions and 1 deletions
|
@ -6370,7 +6370,7 @@ _PyEvalFramePushAndInit(PyThreadState *tstate, PyFunctionObject *func,
|
|||
}
|
||||
if (initialize_locals(tstate, func, localsarray, args, argcount, kwnames)) {
|
||||
assert(frame->owner != FRAME_OWNED_BY_GENERATOR);
|
||||
_PyFrame_Clear(frame);
|
||||
_PyEvalFrameClearAndPop(tstate, frame);
|
||||
return NULL;
|
||||
}
|
||||
return frame;
|
||||
|
@ -6392,6 +6392,10 @@ fail:
|
|||
static void
|
||||
_PyEvalFrameClearAndPop(PyThreadState *tstate, _PyInterpreterFrame * frame)
|
||||
{
|
||||
// Make sure that this is, indeed, the top frame. We can't check this in
|
||||
// _PyThreadState_PopFrame, since f_code is already cleared at that point:
|
||||
assert((PyObject **)frame + frame->f_code->co_nlocalsplus +
|
||||
frame->f_code->co_stacksize + FRAME_SPECIALS_SIZE == tstate->datastack_top);
|
||||
tstate->recursion_remaining--;
|
||||
assert(frame->frame_obj == NULL || frame->frame_obj->f_frame == frame);
|
||||
assert(frame->owner == FRAME_OWNED_BY_THREAD);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue