mirror of https://github.com/python/cpython
bpo-41675: Modernize siginterrupt calls (GH-22028)
siginterrupt is deprecated: ./Modules/signalmodule.c:667:5: warning: ‘siginterrupt’ is deprecated: Use sigaction with SA_RESTART instead [-Wdeprecated-declarations] 667 | if (siginterrupt(signalnum, flag)<0) {
This commit is contained in:
parent
51fece1bb8
commit
f9c5e3f5f6
|
@ -0,0 +1,3 @@
|
|||
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.
|
|
@ -664,7 +664,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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue