Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 21058:9df82c13c675 legacy-trunk
SF bug #483469: crash on unbounded recursion in __del__.
PyEval_EvalCodeEx(): increment tstate->recursion_depth around the
decref of the frame, because the C stack for this call is still in
use and the decref can lead to __del__ methods getting called.
While this gives tstate->recursion_depth a value proportional to the
depth of the C stack (instead of a small constant no matter how
deeply __del__s recurse), it's not enough to stop the reported crash
when using the default recursion limit on Windows.
Bugfix candidate.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Tue, 27 Nov 2001 23:29:29 +0000 |
| parents | dee0e866653e |
| children | 2dfc600f99ce |
line wrap: on
line diff
--- a/Python/ceval.c Tue Nov 27 20:30:42 2001 +0000 +++ b/Python/ceval.c Tue Nov 27 23:29:29 2001 +0000 @@ -2560,7 +2560,15 @@ fail: /* Jump here from prelude on failure */ + /* decref'ing the frame can cause __del__ methods to get invoked, + which can call back into Python. While we're done with the + current Python frame (f), the associated C stack is still in use, + so recursion_depth must be boosted for the duration. + */ + assert(tstate != NULL); + ++tstate->recursion_depth; Py_DECREF(f); + --tstate->recursion_depth; return retval; }
