Replace PyErr_WriteUnraisable() with PyErr_FormatUnraisable().
if (func != NULL) {
PyObject *res = PyObject_CallOneArg(func, context);
if (res == NULL) {
- PyErr_WriteUnraisable(func);
+ PyErr_FormatUnraisable("Exception ignored while calling asyncio "
+ "function %R", func);
}
else {
Py_DECREF(res);
if (func != NULL) {
PyObject *res = PyObject_CallOneArg(func, context);
if (res == NULL) {
- PyErr_WriteUnraisable(func);
+ PyErr_FormatUnraisable("Exception ignored while calling asyncio "
+ "function %R", func);
}
else {
Py_DECREF(res);
PyObject *tp_del = PyUnicode_InternFromString("__tp_del__");
if (tp_del == NULL) {
- PyErr_WriteUnraisable(NULL);
+ PyErr_FormatUnraisable("Exception ignored while deallocating");
PyErr_SetRaisedException(exc);
return;
}
if (del != NULL) {
res = PyObject_CallOneArg(del, self);
Py_DECREF(del);
- if (res == NULL)
- PyErr_WriteUnraisable(del);
- else
+ if (res == NULL) {
+ PyErr_FormatUnraisable("Exception ignored while calling "
+ "deallocator %R", del);
+ }
+ else {
Py_DECREF(res);
+ }
}
/* Restore the saved exception. */
* one of the callbacks.
*/
cpy = PyList_GetSlice(lst, 0, PyList_GET_SIZE(lst));
- if (cpy == NULL)
- PyErr_WriteUnraisable(lst);
+ if (cpy == NULL) {
+ PyErr_FormatUnraisable("Exception ignored in atfork callback "
+ "while copying list %R", lst);
+ }
else {
if (reverse)
PyList_Reverse(cpy);
PyObject *func, *res;
func = PyList_GET_ITEM(cpy, i);
res = _PyObject_CallNoArgs(func);
- if (res == NULL)
- PyErr_WriteUnraisable(func);
- else
+ if (res == NULL) {
+ PyErr_FormatUnraisable("Exception ignored "
+ "in atfork callback %R", func);
+ }
+ else {
Py_DECREF(res);
+ }
}
Py_DECREF(cpy);
}
"unclosed scandir iterator %R", iterator)) {
/* Spurious errors can appear at shutdown */
if (PyErr_ExceptionMatches(PyExc_Warning)) {
- PyErr_WriteUnraisable((PyObject *) iterator);
+ PyErr_FormatUnraisable("Exception ignored while finalizing "
+ "scandir iterator %R", iterator);
}
}
}
{
void *p = PyCapsule_GetPointer(capsule, PyExpat_CAPSULE_NAME);
if (p == NULL) {
- PyErr_WriteUnraisable(capsule);
+ PyErr_FormatUnraisable("Exception ignored while destroying "
+ "pyexact capsule");
return;
}
PyMem_Free(p);
/* copy-paste of weakrefobject.c's handle_callback() */
temp = PyObject_CallOneArg(callback, (PyObject *)wr);
if (temp == NULL) {
- PyErr_WriteUnraisable(callback);
+ PyErr_FormatUnraisable("Exception ignored on "
+ "calling weakref callback %R", callback);
}
else {
Py_DECREF(temp);
Py_INCREF(cb); /* make sure cb doesn't go away */
r = PyObject_Vectorcall(cb, stack, 2, NULL);
if (r == NULL) {
- PyErr_WriteUnraisable(cb);
+ PyErr_FormatUnraisable("Exception ignored while "
+ "calling GC callback %R", cb);
}
else {
Py_DECREF(r);
"gc", NULL, message,
PyList_GET_SIZE(gcstate->garbage)))
{
- PyErr_WriteUnraisable(NULL);
+ PyErr_FormatUnraisable("Exception ignored in GC shutdown");
}
if (gcstate->debug & _PyGC_DEBUG_UNCOLLECTABLE) {
PyObject *repr = NULL, *bytes = NULL;
repr = PyObject_Repr(gcstate->garbage);
if (!repr || !(bytes = PyUnicode_EncodeFSDefault(repr))) {
- PyErr_WriteUnraisable(gcstate->garbage);
+ PyErr_FormatUnraisable("Exception ignored in GC shutdown "
+ "while formatting garbage");
}
else {
PySys_WriteStderr(
#ifdef Py_DEBUG
PyObject *exc = PyErr_GetRaisedException();
if (PyErr_WarnExplicitFormat(PyExc_ResourceWarning, "gc", 0,
- "gc", NULL, "Object of type %s is not untracked before destruction",
- Py_TYPE(op)->tp_name)) {
- PyErr_WriteUnraisable(NULL);
+ "gc", NULL,
+ "Object of type %s is not untracked "
+ "before destruction",
+ Py_TYPE(op)->tp_name))
+ {
+ PyErr_FormatUnraisable("Exception ignored on object deallocation");
}
PyErr_SetRaisedException(exc);
#endif
/* copy-paste of weakrefobject.c's handle_callback() */
PyObject *temp = PyObject_CallOneArg(callback, (PyObject *)wr);
if (temp == NULL) {
- PyErr_WriteUnraisable(callback);
+ PyErr_FormatUnraisable("Exception ignored while "
+ "calling weakref callback %R", callback);
}
else {
Py_DECREF(temp);
Py_INCREF(cb); /* make sure cb doesn't go away */
r = PyObject_Vectorcall(cb, stack, 2, NULL);
if (r == NULL) {
- PyErr_WriteUnraisable(cb);
+ PyErr_FormatUnraisable("Exception ignored while "
+ "calling GC callback %R", cb);
}
else {
Py_DECREF(r);
"gc", NULL, message,
PyList_GET_SIZE(gcstate->garbage)))
{
- PyErr_WriteUnraisable(NULL);
+ PyErr_FormatUnraisable("Exception ignored in GC shutdown");
}
if (gcstate->debug & _PyGC_DEBUG_UNCOLLECTABLE) {
PyObject *repr = NULL, *bytes = NULL;
repr = PyObject_Repr(gcstate->garbage);
if (!repr || !(bytes = PyUnicode_EncodeFSDefault(repr))) {
- PyErr_WriteUnraisable(gcstate->garbage);
+ PyErr_FormatUnraisable("Exception ignored in GC shutdown "
+ "while formatting garbage");
}
else {
PySys_WriteStderr(
#ifdef Py_DEBUG
PyObject *exc = PyErr_GetRaisedException();
if (PyErr_WarnExplicitFormat(PyExc_ResourceWarning, "gc", 0,
- "gc", NULL, "Object of type %s is not untracked before destruction",
- ((PyObject*)op)->ob_type->tp_name)) {
- PyErr_WriteUnraisable(NULL);
+ "gc", NULL,
+ "Object of type %s is not untracked "
+ "before destruction",
+ Py_TYPE(op)->tp_name))
+ {
+ PyErr_FormatUnraisable("Exception ignored on object deallocation");
}
PyErr_SetRaisedException(exc);
#endif