mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +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
|
@ -362,6 +362,7 @@ Vincent Delft
|
||||||
Arnaud Delobelle
|
Arnaud Delobelle
|
||||||
Konrad Delong
|
Konrad Delong
|
||||||
Erik Demaine
|
Erik Demaine
|
||||||
|
Jeroen Demeyer
|
||||||
Martin Dengler
|
Martin Dengler
|
||||||
John Dennis
|
John Dennis
|
||||||
L. Peter Deutsch
|
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
|
else
|
||||||
func = signal_handler;
|
func = signal_handler;
|
||||||
|
/* Check for pending signals before changing signal handler */
|
||||||
|
if (PyErr_CheckSignals()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (PyOS_setsig(signalnum, func) == SIG_ERR) {
|
if (PyOS_setsig(signalnum, func) == SIG_ERR) {
|
||||||
PyErr_SetFromErrno(PyExc_OSError);
|
PyErr_SetFromErrno(PyExc_OSError);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
old_handler = Handlers[signalnum].func;
|
old_handler = Handlers[signalnum].func;
|
||||||
_Py_atomic_store_relaxed(&Handlers[signalnum].tripped, 0);
|
|
||||||
Py_INCREF(handler);
|
Py_INCREF(handler);
|
||||||
Handlers[signalnum].func = handler;
|
Handlers[signalnum].func = handler;
|
||||||
if (old_handler != NULL)
|
if (old_handler != NULL)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue