mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
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.
This commit is contained in:
parent
61381d7da1
commit
20cc695286
11 changed files with 81 additions and 51 deletions
|
@ -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;
|
||||
|
|
35
Include/internal/pycore_signal.h
Normal file
35
Include/internal/pycore_signal.h
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue