From bf86c06baeef29e2cfc56df39e09ae51960cf227 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Mon, 31 Aug 2020 14:53:33 +0100 Subject: [PATCH 1/2] bpo-41675: Modernize siginterrupt calls --- .../2020-08-31-14-53-17.bpo-41675.VSoqWU.rst | 3 +++ Modules/signalmodule.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst b/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst new file mode 100644 index 00000000000000..0974c09b41ac63 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst @@ -0,0 +1,3 @@ +The implementation of :func:`signal.siginterrupt` now uses +:c:func:`sigaction` instead of the deprecated :c:func:`siginterrupt`. Patch +by Pablo Galindo. diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 7bc1b535e6e2ca..ff655b43bf2995 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -664,7 +664,19 @@ signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) "signal number out of range"); return NULL; } +#ifdef HAVE_SIGACTION + struct sigaction act; + (void) sigaction(signalnum, NULL, &act); + if (flag) { + act.sa_flags &= ~SA_RESTART; + } + else { + act.sa_flags |= SA_RESTART; + } + if (sigaction(signalnum, &act, NULL)<0) { +#else if (siginterrupt(signalnum, flag)<0) { +#endif PyErr_SetFromErrno(PyExc_OSError); return NULL; } From 34ad2cd627f613436b3f99deb10cebdff070c411 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Wed, 2 Sep 2020 11:55:06 +0100 Subject: [PATCH 2/2] fixup! bpo-41675: Modernize siginterrupt calls --- .../2020-08-31-14-53-17.bpo-41675.VSoqWU.rst | 6 +++--- Modules/signalmodule.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst b/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst index 0974c09b41ac63..aa102f8fe43845 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2020-08-31-14-53-17.bpo-41675.VSoqWU.rst @@ -1,3 +1,3 @@ -The implementation of :func:`signal.siginterrupt` now uses -:c:func:`sigaction` instead of the deprecated :c:func:`siginterrupt`. Patch -by Pablo Galindo. +The implementation of :func:`signal.siginterrupt` now uses :c:func:`sigaction` +(if it is available in the system) instead of the deprecated :c:func:`siginterrupt`. +Patch by Pablo Galindo. diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index ff655b43bf2995..c49a3ea52e71de 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -673,9 +673,9 @@ signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) else { act.sa_flags |= SA_RESTART; } - if (sigaction(signalnum, &act, NULL)<0) { + if (sigaction(signalnum, &act, NULL) < 0) { #else - if (siginterrupt(signalnum, flag)<0) { + if (siginterrupt(signalnum, flag) < 0) { #endif PyErr_SetFromErrno(PyExc_OSError); return NULL;