signalmodule.c uses _PyErr_WriteUnraisableMsg() (#98217)

Signal wakeup fd errors are now logged with
_PyErr_WriteUnraisableMsg(), rather than PySys_WriteStderr() and
PyErr_WriteUnraisable(), to pass the error message to
sys.unraisablehook. By default, it's still written into stderr (unless
sys.unraisablehook is overriden).
This commit is contained in:
Victor Stinner 2022-10-12 17:26:58 +02:00 committed by GitHub
parent a8c8526fd8
commit 342b1151ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 7 deletions

View File

@ -272,9 +272,8 @@ report_wakeup_write_error(void *data)
errno = (int) (intptr_t) data;
PyErr_Fetch(&exc, &val, &tb);
PyErr_SetFromErrno(PyExc_OSError);
PySys_WriteStderr("Exception ignored when trying to write to the "
"signal wakeup fd:\n");
PyErr_WriteUnraisable(NULL);
_PyErr_WriteUnraisableMsg("when trying to write to the signal wakeup fd",
NULL);
PyErr_Restore(exc, val, tb);
errno = save_errno;
return 0;
@ -284,15 +283,15 @@ report_wakeup_write_error(void *data)
static int
report_wakeup_send_error(void* data)
{
int send_errno = (int) (intptr_t) data;
PyObject *exc, *val, *tb;
PyErr_Fetch(&exc, &val, &tb);
/* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which
recognizes the error codes used by both GetLastError() and
WSAGetLastError */
PyErr_SetExcFromWindowsErr(PyExc_OSError, (int) (intptr_t) data);
PySys_WriteStderr("Exception ignored when trying to send to the "
"signal wakeup fd:\n");
PyErr_WriteUnraisable(NULL);
PyErr_SetExcFromWindowsErr(PyExc_OSError, send_errno);
_PyErr_WriteUnraisableMsg("when trying to send to the signal wakeup fd", NULL);
PyErr_Restore(exc, val, tb);
return 0;
}