diff options
author | Antoine Pitrou <pitrou@free.fr> | 2017-11-03 20:36:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-03 20:36:39 +0100 |
commit | c713837e91f39dc18740c74729cb7cebcf54fe6e (patch) | |
tree | 113c19eb0a70daeb8db0e325eb383da8b30304ba /Modules/signalmodule.c | |
parent | b694770a2b23cd485c98bf673a8b2dc1a865d9df (diff) | |
download | cpython-git-c713837e91f39dc18740c74729cb7cebcf54fe6e.tar.gz |
[2.7] bpo-30057: Fix potential missed signal in signal.signal(). (GH-4258) (#4263)
Bug report and patch by Jeroen Demeyer..
(cherry picked from commit f6f90ff079a22b79a58d47b6117cc8a8c7d366f3)
Diffstat (limited to 'Modules/signalmodule.c')
-rw-r--r-- | Modules/signalmodule.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index c7bf1f0853..ef70d10bb1 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -317,12 +317,15 @@ signal_signal(PyObject *self, PyObject *args) } else func = signal_handler; + /* Check for pending signals before changing signal handler */ + if (PyErr_CheckSignals()) { + return NULL; + } if (PyOS_setsig(sig_num, func) == SIG_ERR) { PyErr_SetFromErrno(PyExc_RuntimeError); return NULL; } old_handler = Handlers[sig_num].func; - Handlers[sig_num].tripped = 0; Py_INCREF(obj); Handlers[sig_num].func = obj; if (old_handler != NULL) |