summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-04-25 22:13:31 (GMT)
committerGitHub <noreply@github.com>2022-04-25 22:13:31 (GMT)
commit20cc69528677b3e5191139d1cb587531f4893b55 (patch)
tree50c706da1e4040b15b1d2cda8eb7a1a13a48b7dc /Include
parent61381d7da1233849b280706f11dbcae4deed949d (diff)
downloadcpython-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.h16
-rw-r--r--Include/internal/pycore_signal.h35
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