mirror of
https://github.com/python/cpython.git
synced 2025-09-29 11:45:57 +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
|
||||
Konrad Delong
|
||||
Erik Demaine
|
||||
Jeroen Demeyer
|
||||
Martin Dengler
|
||||
John Dennis
|
||||
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
|
||||
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