mirror of https://github.com/python/cpython.git
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
|
@ -362,6 +362,7 @@ Vincent Delft
|
|||
Arnaud Delobelle
|
||||
Konrad Delong
|
||||
Erik Demaine
|
||||
Jeroen Demeyer
|
||||
Martin Dengler
|
||||
John Dennis
|
||||
L. Peter Deutsch
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix potential missed signal in signal.signal().
|
|
@ -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…
Reference in New Issue