From ab60b9dc9fea87fa8a20a1286a26d79124d685bd Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 6 May 2020 17:53:07 +0200 Subject: [PATCH] bpo-40533: Disable GC in subinterpreters When Python is built with experimental isolated interpreters, a garbage collection now does nothing in an isolated interpreter. Temporary workaround until subinterpreters stop sharing Python objects. --- Modules/gcmodule.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 56dcb101e0005e..a44752b1cc4da7 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1181,6 +1181,14 @@ collect(PyThreadState *tstate, int generation, _PyTime_t t1 = 0; /* initialize to prevent a compiler warning */ GCState *gcstate = &tstate->interp->gc; +#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS + if (tstate->interp->config._isolated_interpreter) { + // bpo-40533: The garbage collector must not be run on parallel on + // Python objects shared by multiple interpreters. + return 0; + } +#endif + if (gcstate->debug & DEBUG_STATS) { PySys_WriteStderr("gc: collecting generation %d...\n", generation); show_stats_each_generations(gcstate);