From: Victor Stinner Date: Fri, 24 Jan 2020 17:05:24 +0000 (+0100) Subject: bpo-38631: Avoid Py_FatalError() in GC collect() (GH-18164) X-Git-Tag: v3.9.0a3~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=656c45ec9a9dc2e94cec199ebde553a6979e0e05;p=thirdparty%2FPython%2Fcpython.git bpo-38631: Avoid Py_FatalError() in GC collect() (GH-18164) collect() should not get an exception, but it does, logging the exception is enough. Override sys.unraisablehook to decide how to handle unraisable exceptions. Py_FatalError() should be avoided whenever possible. --- diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index aacdb3f45a17..99a6c9ed91d3 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -118,9 +118,6 @@ gc_decref(PyGC_Head *g) g->_gc_prev -= 1 << _PyGC_PREV_SHIFT; } -/* Python string to use if unhandled exception occurs */ -static PyObject *gc_str = NULL; - /* set for debugging information */ #define DEBUG_STATS (1<<0) /* print collection statistics */ #define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */ @@ -1310,10 +1307,7 @@ collect(PyThreadState *tstate, int generation, _PyErr_Clear(tstate); } else { - if (gc_str == NULL) - gc_str = PyUnicode_FromString("garbage collection"); - PyErr_WriteUnraisable(gc_str); - Py_FatalError("unexpected exception during garbage collection"); + _PyErr_WriteUnraisableMsg("in garbage collection", NULL); } }