bpo-30057: Fix potential missed signal in signal.signal(). (#4258)

Bug report and patch by Jeroen Demeyer.
This commit is contained in:
Antoine Pitrou 2017-11-03 19:58:46 +01:00 committed by GitHub
parent a7723d8b09
commit f6f90ff079
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 1 deletions

View File

@ -362,6 +362,7 @@ Vincent Delft
Arnaud Delobelle
Konrad Delong
Erik Demaine
Jeroen Demeyer
Martin Dengler
John Dennis
L. Peter Deutsch

View File

@ -0,0 +1 @@
Fix potential missed signal in signal.signal().

View File

@ -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)