mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
gh-129354: Use PyErr_FormatUnraisable() function (#129514)
Replace PyErr_WriteUnraisable() with PyErr_FormatUnraisable().
This commit is contained in:
parent
8b70ff5872
commit
3447f4a56a
6 changed files with 51 additions and 27 deletions
|
|
@ -1715,7 +1715,8 @@ FutureObj_finalize(FutureObj *fut)
|
|||
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);
|
||||
|
|
@ -2978,7 +2979,8 @@ TaskObj_finalize(TaskObj *task)
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ slot_tp_del(PyObject *self)
|
|||
|
||||
PyObject *tp_del = PyUnicode_InternFromString("__tp_del__");
|
||||
if (tp_del == NULL) {
|
||||
PyErr_WriteUnraisable(NULL);
|
||||
PyErr_FormatUnraisable("Exception ignored while deallocating");
|
||||
PyErr_SetRaisedException(exc);
|
||||
return;
|
||||
}
|
||||
|
|
@ -104,10 +104,13 @@ slot_tp_del(PyObject *self)
|
|||
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. */
|
||||
|
|
|
|||
|
|
@ -606,8 +606,10 @@ run_at_forkers(PyObject *lst, int reverse)
|
|||
* 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);
|
||||
|
|
@ -615,10 +617,13 @@ run_at_forkers(PyObject *lst, int reverse)
|
|||
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);
|
||||
}
|
||||
|
|
@ -16330,7 +16335,8 @@ ScandirIterator_finalize(ScandirIterator *iterator)
|
|||
"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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1948,7 +1948,8 @@ pyexpat_capsule_destructor(PyObject *capsule)
|
|||
{
|
||||
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);
|
||||
|
|
|
|||
20
Python/gc.c
20
Python/gc.c
|
|
@ -994,7 +994,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
|||
/* 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);
|
||||
|
|
@ -1797,7 +1798,8 @@ do_gc_callback(GCState *gcstate, const char *phase,
|
|||
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);
|
||||
|
|
@ -2086,13 +2088,14 @@ _PyGC_DumpShutdownStats(PyInterpreterState *interp)
|
|||
"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(
|
||||
|
|
@ -2344,9 +2347,12 @@ PyObject_GC_Del(void *op)
|
|||
#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
|
||||
|
|
|
|||
|
|
@ -1128,7 +1128,8 @@ call_weakref_callbacks(struct collection_state *state)
|
|||
/* 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);
|
||||
|
|
@ -1447,7 +1448,8 @@ invoke_gc_callback(PyThreadState *tstate, const char *phase,
|
|||
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);
|
||||
|
|
@ -2029,13 +2031,14 @@ _PyGC_DumpShutdownStats(PyInterpreterState *interp)
|
|||
"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(
|
||||
|
|
@ -2243,9 +2246,12 @@ PyObject_GC_Del(void *op)
|
|||
#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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue