Skip to content

Commit f6f90ff

Browse files
authored
bpo-30057: Fix potential missed signal in signal.signal(). (#4258)
Bug report and patch by Jeroen Demeyer.
1 parent a7723d8 commit f6f90ff

File tree

3 files changed

+6
-1
lines changed

3 files changed

+6
-1
lines changed

‎Misc/ACKS‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ Vincent Delft
362362
Arnaud Delobelle
363363
Konrad Delong
364364
Erik Demaine
365+
Jeroen Demeyer
365366
Martin Dengler
366367
John Dennis
367368
L. Peter Deutsch
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix potential missed signal in signal.signal().

‎Modules/signalmodule.c‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,12 +461,15 @@ signal_signal_impl(PyObject *module, int signalnum, PyObject *handler)
461461
}
462462
else
463463
func = signal_handler;
464+
/* Check for pending signals before changing signal handler */
465+
if (PyErr_CheckSignals()) {
466+
return NULL;
467+
}
464468
if (PyOS_setsig(signalnum, func) == SIG_ERR) {
465469
PyErr_SetFromErrno(PyExc_OSError);
466470
return NULL;
467471
}
468472
old_handler = Handlers[signalnum].func;
469-
_Py_atomic_store_relaxed(&Handlers[signalnum].tripped, 0);
470473
Py_INCREF(handler);
471474
Handlers[signalnum].func = handler;
472475
if (old_handler != NULL)

0 commit comments

Comments
 (0)