From 026757bb17bb4a0b930b8aff719b1a7070e60239 Mon Sep 17 00:00:00 2001 From: Aniket Panse Date: Fri, 7 May 2021 14:09:26 -0700 Subject: [PATCH] Backport bpo-41675: Modernize siginterrupt calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: The OSS build fails at compilation with this error: ``` /home/aniketpanse/cinder/Modules/signalmodule.c: In function ‘signal_siginterrupt_impl’: /home/aniketpanse/cinder/Modules/signalmodule.c:661:5: error: ‘siginterrupt’ is deprecated: Use sigaction with SA_RESTART instead [-Werror=deprecated-declarations] 661 | if (siginterrupt(signalnum, flag)<0) { | ^~ In file included from /home/aniketpanse/cinder/Modules/signalmodule.c:26: /usr/include/signal.h:311:12: note: declared here 311 | extern int siginterrupt (int __sig, int __interrupt) __THROW | ^~~~~~~~~~~~ cc1: all warnings being treated as errors make: *** [Makefile:2431: Modules/signalmodule.o] Error 1 make: *** Waiting for unfinished jobs.... ``` Backport upstream fix from https://github.com/python/cpython/pull/22028 Reviewed By: carljm Differential Revision: D28297270 fbshipit-source-id: 6a0125b75d --- Modules/signalmodule.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 119fc355ff1..b4da912718e 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -658,7 +658,19 @@ signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) "signal number out of range"); return NULL; } - if (siginterrupt(signalnum, flag)<0) { +#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; }