mirror of https://github.com/python/cpython
gh-90623: signal.raise_signal() calls PyErr_CheckSignals() (#91756)
signal.raise_signal() and os.kill() now call PyErr_CheckSignals() to check immediately for pending signals.
This commit is contained in:
parent
c77953b23e
commit
031f1e6040
|
@ -0,0 +1,2 @@
|
|||
:func:`signal.raise_signal` and :func:`os.kill` now check immediately for
|
||||
pending signals. Patch by Victor Stinner.
|
|
@ -7929,8 +7929,17 @@ os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal)
|
|||
return NULL;
|
||||
}
|
||||
#ifndef MS_WINDOWS
|
||||
if (kill(pid, (int)signal) == -1)
|
||||
if (kill(pid, (int)signal) == -1) {
|
||||
return posix_error();
|
||||
}
|
||||
|
||||
// Check immediately if the signal was sent to the current process.
|
||||
// Don't micro-optimize pid == getpid(), since PyErr_SetString() check
|
||||
// is cheap.
|
||||
if (PyErr_CheckSignals()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
#else /* !MS_WINDOWS */
|
||||
PyObject *result;
|
||||
|
|
|
@ -481,6 +481,13 @@ signal_raise_signal_impl(PyObject *module, int signalnum)
|
|||
if (err) {
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
|
||||
// If the current thread can handle signals, handle immediately
|
||||
// the raised signal.
|
||||
if (PyErr_CheckSignals()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue