[Python-checkins] bpo-30057: Fix potential missed signal in signal.signal(). (#4258)

Antoine Pitrou webhook-mailer at python.org
Fri Nov 3 14:58:50 EDT 2017


https://github.com/python/cpython/commit/f6f90ff079a22b79a58d47b6117cc8a8c7d366f3
commit: f6f90ff079a22b79a58d47b6117cc8a8c7d366f3
branch: master
author: Antoine Pitrou <pitrou at free.fr>
committer: GitHub <noreply at github.com>
date: 2017-11-03T19:58:46+01:00
summary:

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

Bug report and patch by Jeroen Demeyer.

files:
A Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst
M Misc/ACKS
M Modules/signalmodule.c

diff --git a/Misc/ACKS b/Misc/ACKS
index 1bd3c047d89..05113903f06 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -362,6 +362,7 @@ Vincent Delft
 Arnaud Delobelle
 Konrad Delong
 Erik Demaine
+Jeroen Demeyer
 Martin Dengler
 John Dennis
 L. Peter Deutsch
diff --git a/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst b/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst
new file mode 100644
index 00000000000..5740eb2500f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst
@@ -0,0 +1 @@
+Fix potential missed signal in signal.signal().
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index d470727fb62..1023244b626 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -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)



More information about the Python-checkins mailing list