]> granicus.if.org Git - python/commitdiff
bpo-30057: Fix potential missed signal in signal.signal(). (GH-4258) (#4261)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 3 Nov 2017 19:23:12 +0000 (12:23 -0700)
committerAntoine Pitrou <pitrou@free.fr>
Fri, 3 Nov 2017 19:23:12 +0000 (20:23 +0100)
Bug report and patch by Jeroen Demeyer.
(cherry picked from commit f6f90ff079a22b79a58d47b6117cc8a8c7d366f3)

Misc/ACKS
Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst [new file with mode: 0644]
Modules/signalmodule.c

index 667f447bc5e5bfae11c73f42da93da158c0c1639..5f21c4bce07ac9f0311441dad7cc9fb86d198e79 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -358,6 +358,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 (file)
index 0000000..5740eb2
--- /dev/null
@@ -0,0 +1 @@
+Fix potential missed signal in signal.signal().
index 0e6099fd361cb5cbbdbb9a4ac4bd06cc4b024f8d..0b9e8f1c23a95eb7f2eb085333cf4453b5a33a3a 100644 (file)
@@ -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)