mirror of
https://github.com/python/cpython.git
synced 2025-09-29 19:56:59 +00:00
bpo-30057: Fix potential missed signal in signal.signal(). (GH-4258) (#4261)
Bug report and patch by Jeroen Demeyer.
(cherry picked from commit f6f90ff079
)
This commit is contained in:
parent
b5f09acf0a
commit
ea80ae04e2
3 changed files with 6 additions and 1 deletions
|
@ -358,6 +358,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().
|
|
@ -462,12 +462,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