mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-30057: Fix potential missed signal in signal.signal(). (#4258)
Bug report and patch by Jeroen Demeyer.
This commit is contained in:
parent
a7723d8b09
commit
f6f90ff079
3 changed files with 6 additions and 1 deletions
|
@ -461,12 +461,15 @@ signal_signal_impl(PyObject *module, int signalnum, PyObject *handler)
|
|||
}
|
||||
else
|
||||
func = signal_handler;
|
||||
/* Check for pending signals before changing signal handler */
|
||||
if (PyErr_CheckSignals()) {
|
||||
return NULL;
|
||||
}
|
||||
if (PyOS_setsig(signalnum, func) == SIG_ERR) {
|
||||
PyErr_SetFromErrno(PyExc_OSError);
|
||||
return NULL;
|
||||
}
|
||||
old_handler = Handlers[signalnum].func;
|
||||
_Py_atomic_store_relaxed(&Handlers[signalnum].tripped, 0);
|
||||
Py_INCREF(handler);
|
||||
Handlers[signalnum].func = handler;
|
||||
if (old_handler != NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue