Skip to content

Commit 0b05acf

Browse files
committed
Free cold executor when closing of interpreter
1 parent db336ce commit 0b05acf

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

Include/internal/pycore_optimizer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@ static inline int is_terminator(const _PyUOpInstruction *uop)
372372
);
373373
}
374374

375+
extern void _PyExecutor_Free(_PyExecutorObject *self);
376+
375377
PyAPI_FUNC(int) _PyDumpExecutors(FILE *out);
376378
#ifdef _Py_TIER2
377379
extern void _Py_ClearExecutorDeletionList(PyInterpreterState *interp);

Python/optimizer.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ static int executor_clear(PyObject *executor);
205205
static void unlink_executor(_PyExecutorObject *executor);
206206

207207

208-
static void
209-
free_executor(_PyExecutorObject *self)
208+
void
209+
_PyExecutor_Free(_PyExecutorObject *self)
210210
{
211211
#ifdef _Py_JIT
212212
_PyJIT_Free(self);
@@ -242,7 +242,7 @@ _Py_ClearExecutorDeletionList(PyInterpreterState *interp)
242242
}
243243
else {
244244
*prev_to_next_ptr = exec->vm_data.links.next;
245-
free_executor(exec);
245+
_PyExecutor_Free(exec);
246246
}
247247
exec = *prev_to_next_ptr;
248248
}

Python/pystate.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,9 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate)
773773
Py_CLEAR(interp->monitoring_callables[t][e]);
774774
}
775775
}
776+
struct _PyExecutorObject *cold = interp->cold_executor;
777+
interp->cold_executor = NULL;
778+
_PyExecutor_Free(cold);
776779
interp->sys_profile_initialized = false;
777780
interp->sys_trace_initialized = false;
778781
for (int t = 0; t < PY_MONITORING_TOOL_IDS; t++) {

0 commit comments

Comments
 (0)