diff --git c/Modules/signalmodule.c w/Modules/signalmodule.c index c0e17f3..e07a1c1 100644 --- c/Modules/signalmodule.c +++ w/Modules/signalmodule.c @@ -928,14 +928,32 @@ PyErr_CheckSignals(void) Handlers[i].tripped = 0; if (arglist) { - result = PyEval_CallObject(Handlers[i].func, - arglist); - Py_DECREF(arglist); + if (Handlers[i].func == DefaultHandler) { + /* default handler requested, call it */ + result = signal_default_int_handler(NULL, NULL); + } + + else if (Handlers[i].func == IgnoreHandler) { + /* ignore signal, nothing to return */ + result = NULL; + } + + else if (Handlers[i].func == Py_None) { + /* no handler set, nothing to call, nothing to return */ + result = NULL; + } + + else { + /* we have a non-default, non-ignoring, non-empty handler + * - call it! */ + result = PyEval_CallObject(Handlers[i].func, arglist); + } } if (!result) return -1; - Py_DECREF(result); + Py_XDECREF(arglist); + Py_XDECREF(result); } }