[Python-checkins] bpo-38631: Avoid Py_FatalError() in GC collect() (GH-18164)

Victor Stinner webhook-mailer at python.org
Fri Jan 24 12:05:28 EST 2020


https://github.com/python/cpython/commit/656c45ec9a9dc2e94cec199ebde553a6979e0e05
commit: 656c45ec9a9dc2e94cec199ebde553a6979e0e05
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-01-24T18:05:24+01:00
summary:

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.

files:
M Modules/gcmodule.c

diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index aacdb3f45a179..99a6c9ed91d36 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);
         }
     }
 



More information about the Python-checkins mailing list