diff options
Diffstat (limited to 'Modules/_tracemalloc.c')
-rw-r--r-- | Modules/_tracemalloc.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 24628a907f..6f28f7f575 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -425,10 +425,7 @@ traceback_hash(traceback_t *traceback) static void traceback_get_frames(traceback_t *traceback) { - PyThreadState *tstate; - PyFrameObject *pyframe; - - tstate = PyGILState_GetThisThreadState(); + PyThreadState *tstate = PyGILState_GetThisThreadState(); if (tstate == NULL) { #ifdef TRACE_DEBUG tracemalloc_error("failed to get the current thread state"); @@ -436,7 +433,8 @@ traceback_get_frames(traceback_t *traceback) return; } - pyframe = PyThreadState_GetFrame(tstate); + PyFrameObject *pyframe = PyThreadState_GetFrame(tstate); + Py_XDECREF(pyframe); // use a borrowed reference for (; pyframe != NULL; pyframe = pyframe->f_back) { if (traceback->nframe < _Py_tracemalloc_config.max_nframe) { tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]); |