From 310e2d25170a88ef03f6fd31efcc899fe062da2c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 22 Nov 2019 10:58:00 +0100 Subject: bpo-36854: Fix refleak in subinterpreter (GH-17331) finalize_interp_clear() now explicitly clears the codec registry and then trigger a GC collection to clear all references. --- Python/pylifecycle.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Python') diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 7591f069b4..8c508e3380 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1210,6 +1210,14 @@ finalize_interp_clear(PyThreadState *tstate) { int is_main_interp = _Py_IsMainInterpreter(tstate); + /* bpo-36854: Explicitly clear the codec registry + and trigger a GC collection */ + PyInterpreterState *interp = tstate->interp; + Py_CLEAR(interp->codec_search_path); + Py_CLEAR(interp->codec_search_cache); + Py_CLEAR(interp->codec_error_registry); + _PyGC_CollectNoFail(); + /* Clear interpreter state and all thread states */ PyInterpreterState_Clear(tstate->interp); -- cgit v1.2.1