@@ -4615,6 +4615,12 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
4615
4615
* when the generator is resumed. */
4616
4616
Py_CLEAR (f -> f_back );
4617
4617
4618
+ #ifdef STACKLESS
4619
+ /* Stackless calls need GC. */
4620
+ assert (!_PyObject_GC_IS_TRACKED (f ));
4621
+ _PyObject_GC_TRACK (f );
4622
+ #endif
4623
+
4618
4624
/* Create a new generator that owns the ready to run frame
4619
4625
* and return that as the value. */
4620
4626
if (is_coro ) {
@@ -4642,6 +4648,8 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
4642
4648
if (stackless ) {
4643
4649
Py_INCREF (Py_None );
4644
4650
retval = Py_None ;
4651
+ assert (!_PyObject_GC_IS_TRACKED (f ));
4652
+ _PyObject_GC_TRACK (f );
4645
4653
SLP_STORE_NEXT_FRAME (tstate , f );
4646
4654
Py_DECREF (f );
4647
4655
return STACKLESS_PACK (tstate , retval );
@@ -4659,8 +4667,6 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
4659
4667
else {
4660
4668
retval = slp_eval_frame (f );
4661
4669
}
4662
- Py_DECREF (f );
4663
- return retval ;
4664
4670
}
4665
4671
#else
4666
4672
retval = PyEval_EvalFrameEx (f ,0 );
@@ -5455,6 +5461,8 @@ _PyFunction_FastCall(PyCodeObject *co, PyObject **args, Py_ssize_t nargs,
5455
5461
if (stackless ) {
5456
5462
Py_INCREF (Py_None );
5457
5463
result = Py_None ;
5464
+ assert (!_PyObject_GC_IS_TRACKED (f ));
5465
+ _PyObject_GC_TRACK (f );
5458
5466
SLP_STORE_NEXT_FRAME (tstate , f );
5459
5467
Py_DECREF (f );
5460
5468
return STACKLESS_PACK (tstate , result );
0 commit comments