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.
This commit is contained in:
Victor Stinner 2020-01-24 18:05:24 +01:00 committed by GitHub
parent 88704334e5
commit 656c45ec9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 7 deletions

View File

@ -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);
}
}