diff options
author | Victor Stinner <vstinner@python.org> | 2022-04-25 22:13:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-25 22:13:31 (GMT) |
commit | 20cc69528677b3e5191139d1cb587531f4893b55 (patch) | |
tree | 50c706da1e4040b15b1d2cda8eb7a1a13a48b7dc /Include | |
parent | 61381d7da1233849b280706f11dbcae4deed949d (diff) | |
download | cpython-20cc69528677b3e5191139d1cb587531f4893b55.zip cpython-20cc69528677b3e5191139d1cb587531f4893b55.tar.gz cpython-20cc69528677b3e5191139d1cb587531f4893b55.tar.bz2 |
gh-64783: Fix signal.NSIG value on FreeBSD (#91929)
Fix signal.NSIG value on FreeBSD to accept signal numbers greater
than 32, like signal.SIGRTMIN and signal.SIGRTMAX.
* Add Py_NSIG constant.
* Add pycore_signal.h internal header file.
* _Py_Sigset_Converter() now includes the range of valid signals in
the error message.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/internal/pycore_pylifecycle.h | 16 | ||||
-rw-r--r-- | Include/internal/pycore_signal.h | 35 |
2 files changed, 35 insertions, 16 deletions
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h index 295505f..b4718b8 100644 --- a/Include/internal/pycore_pylifecycle.h +++ b/Include/internal/pycore_pylifecycle.h @@ -8,24 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#ifdef HAVE_SIGNAL_H -#include <signal.h> -#endif - #include "pycore_runtime.h" // _PyRuntimeState -#ifndef NSIG -# if defined(_NSIG) -# define NSIG _NSIG /* For BSD/SysV */ -# elif defined(_SIGMAX) -# define NSIG (_SIGMAX + 1) /* For QNX */ -# elif defined(SIGMAX) -# define NSIG (SIGMAX + 1) /* For djgpp */ -# else -# define NSIG 64 /* Use a reasonable default value */ -# endif -#endif - /* Forward declarations */ struct _PyArgv; struct pyruntimestate; diff --git a/Include/internal/pycore_signal.h b/Include/internal/pycore_signal.h new file mode 100644 index 0000000..b921dd1 --- /dev/null +++ b/Include/internal/pycore_signal.h @@ -0,0 +1,35 @@ +// Define Py_NSIG constant for signal handling. + +#ifndef Py_INTERNAL_SIGNAL_H +#define Py_INTERNAL_SIGNAL_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include <signal.h> // NSIG + +#ifdef _SIG_MAXSIG + // gh-91145: On FreeBSD, <signal.h> defines NSIG as 32: it doesn't include + // realtime signals: [SIGRTMIN,SIGRTMAX]. Use _SIG_MAXSIG instead. For + // example on x86-64 FreeBSD 13, SIGRTMAX is 126 and _SIG_MAXSIG is 128. +# define Py_NSIG _SIG_MAXSIG +#elif defined(NSIG) +# define Py_NSIG NSIG +#elif defined(_NSIG) +# define Py_NSIG _NSIG // BSD/SysV +#elif defined(_SIGMAX) +# define Py_NSIG (_SIGMAX + 1) // QNX +#elif defined(SIGMAX) +# define Py_NSIG (SIGMAX + 1) // djgpp +#else +# define Py_NSIG 64 // Use a reasonable default value +#endif + +#ifdef __cplusplus +} +#endif +#endif // !Py_INTERNAL_SIGNAL_H |