@@ -5050,20 +5050,23 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
5050
5050
_PyFrame_SetStackPointer (frame , stack_pointer );
5051
5051
InterpreterFrame * gen_frame = (InterpreterFrame * )gen -> gi_iframe ;
5052
5052
_PyFrame_Copy (frame , gen_frame );
5053
- frame -> stacktop = 0 ;
5054
- Py_INCREF (frame -> f_func );
5055
- Py_INCREF (frame -> f_code );
5056
5053
assert (frame -> frame_obj == NULL );
5057
- frame -> f_locals = NULL ;
5058
5054
gen -> gi_frame_valid = 1 ;
5059
5055
gen_frame -> is_generator = true;
5060
5056
gen_frame -> f_state = FRAME_CREATED ;
5061
5057
_Py_LeaveRecursiveCall (tstate );
5062
5058
if (!frame -> is_entry ) {
5063
- frame = cframe .current_frame = pop_frame (tstate , frame );
5059
+ InterpreterFrame * prev = frame -> previous ;
5060
+ _PyThreadState_PopFrame (tstate , frame );
5061
+ frame = cframe .current_frame = prev ;
5064
5062
_PyFrame_StackPush (frame , (PyObject * )gen );
5065
5063
goto resume_frame ;
5066
5064
}
5065
+ /* Make sure that frame is in a valid state */
5066
+ frame -> stacktop = 0 ;
5067
+ frame -> f_locals = NULL ;
5068
+ Py_INCREF (frame -> f_func );
5069
+ Py_INCREF (frame -> f_code );
5067
5070
/* Restore previous cframe and return. */
5068
5071
tstate -> cframe = cframe .previous ;
5069
5072
tstate -> cframe -> use_tracing = cframe .use_tracing ;
0 commit comments