diff options
author | David Mitchell <davem@iabyn.com> | 2019-11-11 10:46:56 +0000 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2019-11-18 09:34:40 +0000 |
commit | 5e7940ceb0d598dfa2aefdcdbda1f1dd8caa6bfd (patch) | |
tree | bba6083512c9b38309f000f789e1721c66e0a7e5 | |
parent | e7124897b9f4ae403795f9db247a331b6da9751e (diff) | |
download | perl-5e7940ceb0d598dfa2aefdcdbda1f1dd8caa6bfd.tar.gz |
add PERL_USE_3ARG_SIGHANDLER macro
There are a bunch of places in core that do
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
to decide whether the C signal handler function should be declared with,
and called with, 1 arg or 3 args.
This commit just adds
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
# define PERL_USE_3ARG_SIGHANDLER
#endif
Then uses the new macro in all other places rather than checking
HAS_SIGACTION and SA_SIGINFO. Thus there is no functional change; it just
makes the code more readable.
However, it turns out that all is not well with core's use of 1-arg
versus 3-arg, and the few commits will fix this.
-rw-r--r-- | embed.fnc | 2 | ||||
-rw-r--r-- | embed.h | 20 | ||||
-rw-r--r-- | iperlsys.h | 2 | ||||
-rw-r--r-- | mg.c | 14 | ||||
-rw-r--r-- | perl.h | 4 | ||||
-rw-r--r-- | proto.h | 24 |
6 files changed, 36 insertions, 30 deletions
@@ -1683,7 +1683,7 @@ Axpd |OP* |op_scope |NULLOK OP* o pe |void |set_caret_X Apd |void |setdefout |NN GV* gv Ap |HEK* |share_hek |NN const char* str|SSize_t len|U32 hash -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER : Used in perl.c Tp |Signal_t |sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap ATp |Signal_t |csighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap @@ -761,7 +761,7 @@ #define whichsig_sv(a) Perl_whichsig_sv(aTHX_ a) #define wrap_keyword_plugin(a,b) Perl_wrap_keyword_plugin(aTHX_ a,b) #define wrap_op_checker(a,b,c) Perl_wrap_op_checker(aTHX_ a,b,c) -#if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO)) +#if !(defined(PERL_USE_3ARG_SIGHANDLER)) #define csighandler Perl_csighandler #endif #if !defined(EBCDIC) @@ -808,9 +808,6 @@ #define pad_setsv(a,b) Perl_pad_setsv(aTHX_ a,b) #define pad_sv(a) Perl_pad_sv(aTHX_ a) #endif -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) -#define csighandler Perl_csighandler -#endif #if defined(HAVE_INTERP_INTERN) #define sys_intern_clear() Perl_sys_intern_clear(aTHX) #define sys_intern_init() Perl_sys_intern_init(aTHX) @@ -848,6 +845,9 @@ #define warn_nocontext Perl_warn_nocontext #define warner_nocontext Perl_warner_nocontext #endif +#if defined(PERL_USE_3ARG_SIGHANDLER) +#define csighandler Perl_csighandler +#endif #if defined(UNLINK_ALL_VERSIONS) #define unlnk(a) Perl_unlnk(aTHX_ a) #endif @@ -1446,12 +1446,12 @@ #define my_nl_langinfo S_my_nl_langinfo # endif # endif -# if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO)) -#define sighandler Perl_sighandler -# endif # if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION)) #define do_exec(a) Perl_do_exec(aTHX_ a) # endif +# if !(defined(PERL_USE_3ARG_SIGHANDLER)) +#define sighandler Perl_sighandler +# endif # if !(defined(_MSC_VER)) #define magic_regdatum_set(a,b) Perl_magic_regdatum_set(aTHX_ a,b) # endif @@ -1550,9 +1550,6 @@ # if defined(HAS_PIPE) #define PerlProc_pipe_cloexec(a) Perl_PerlProc_pipe_cloexec(aTHX_ a) # endif -# if defined(HAS_SIGACTION) && defined(SA_SIGINFO) -#define sighandler Perl_sighandler -# endif # if defined(HAS_SOCKET) #define PerlSock_accept_cloexec(a,b,c) Perl_PerlSock_accept_cloexec(aTHX_ a,b,c) #define PerlSock_socket_cloexec(a,b,c) Perl_PerlSock_socket_cloexec(aTHX_ a,b,c) @@ -1944,6 +1941,9 @@ # if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C) #define pidgone(a,b) S_pidgone(aTHX_ a,b) # endif +# if defined(PERL_USE_3ARG_SIGHANDLER) +#define sighandler Perl_sighandler +# endif # if defined(USE_C_BACKTRACE) #define get_c_backtrace(a,b) Perl_get_c_backtrace(aTHX_ a,b) # endif diff --git a/iperlsys.h b/iperlsys.h index b4a92ea574..de2dad65bb 100644 --- a/iperlsys.h +++ b/iperlsys.h @@ -51,7 +51,7 @@ #include "perlio.h" #ifndef Sighandler_t -# if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +# ifdef PERL_USE_3ARG_SIGHANDLER typedef Signal_t (*Sighandler_t) (int, Siginfo_t*, void*); # else typedef Signal_t (*Sighandler_t) (int); @@ -62,7 +62,7 @@ tie. # include <sys/prctl.h> #endif -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER Signal_t Perl_csighandler(int sig, Siginfo_t *, void *); #else Signal_t Perl_csighandler(int sig); @@ -1487,7 +1487,7 @@ Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg) } Signal_t -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER Perl_csighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL) #else Perl_csighandler(int sig) @@ -1498,7 +1498,8 @@ Perl_csighandler(int sig) #else dTHX; #endif -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) + +#ifdef PERL_USE_3ARG_SIGHANDLER #if defined(__cplusplus) && defined(__GNUC__) /* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap * parameters would be warned about. */ @@ -1506,6 +1507,7 @@ Perl_csighandler(int sig) PERL_UNUSED_ARG(uap); #endif #endif + #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS (void) rsignal(sig, PL_csighandlerp); if (PL_sig_ignoring[sig]) return; @@ -1531,7 +1533,7 @@ Perl_csighandler(int sig) (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)) /* Call the perl level handler now-- * with risk we may be in malloc() or being destructed etc. */ -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER (*PL_sighandlerp)(sig, NULL, NULL); #else (*PL_sighandlerp)(sig); @@ -1613,7 +1615,7 @@ Perl_despatch_signals(pTHX) } #endif PL_psig_pend[sig] = 0; -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER (*PL_sighandlerp)(sig, NULL, NULL); #else (*PL_sighandlerp)(sig); @@ -3318,7 +3320,7 @@ Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len) } Signal_t -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +#ifdef PERL_USE_3ARG_SIGHANDLER Perl_sighandler(int sig, Siginfo_t *sip, void *uap) #else Perl_sighandler(int sig) @@ -2794,6 +2794,10 @@ typedef struct padname PADNAME; #endif +#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +# define PERL_USE_3ARG_SIGHANDLER +#endif + /* Siginfo_t: * This is an alias for the OS's siginfo_t, except that where the OS * doesn't support it, declare a dummy version instead. This allows us to @@ -4094,12 +4094,6 @@ STATIC const char* S_my_nl_langinfo(const int item, bool toggle); #define PERL_ARGS_ASSERT_MY_NL_LANGINFO # endif #endif -#if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO)) -PERL_CALLCONV Signal_t Perl_csighandler(int sig); -#define PERL_ARGS_ASSERT_CSIGHANDLER -PERL_CALLCONV Signal_t Perl_sighandler(int sig); -#define PERL_ARGS_ASSERT_SIGHANDLER -#endif #if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION)) PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd); #define PERL_ARGS_ASSERT_DO_EXEC \ @@ -4112,6 +4106,12 @@ PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ int *indexp, size_t size); assert(indexp) # endif #endif +#if !(defined(PERL_USE_3ARG_SIGHANDLER)) +PERL_CALLCONV Signal_t Perl_csighandler(int sig); +#define PERL_ARGS_ASSERT_CSIGHANDLER +PERL_CALLCONV Signal_t Perl_sighandler(int sig); +#define PERL_ARGS_ASSERT_SIGHANDLER +#endif #if !(defined(_MSC_VER)) PERL_CALLCONV_NO_RET int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg) __attribute__noreturn__; @@ -4564,12 +4564,6 @@ PERL_CALLCONV int Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd) assert(pipefd) #endif -#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) -PERL_CALLCONV Signal_t Perl_csighandler(int sig, Siginfo_t *info, void *uap); -#define PERL_ARGS_ASSERT_CSIGHANDLER -PERL_CALLCONV Signal_t Perl_sighandler(int sig, Siginfo_t *info, void *uap); -#define PERL_ARGS_ASSERT_SIGHANDLER -#endif #if defined(HAS_SOCKET) PERL_CALLCONV int Perl_PerlSock_accept_cloexec(pTHX_ int listenfd, struct sockaddr *addr, Sock_size_t *addrlen) __attribute__warn_unused_result__; @@ -6441,6 +6435,12 @@ PERL_CALLCONV Malloc_t Perl_mem_log_realloc(const UV n, const UV typesize, const STATIC void S_pidgone(pTHX_ Pid_t pid, int status); #define PERL_ARGS_ASSERT_PIDGONE #endif +#if defined(PERL_USE_3ARG_SIGHANDLER) +PERL_CALLCONV Signal_t Perl_csighandler(int sig, Siginfo_t *info, void *uap); +#define PERL_ARGS_ASSERT_CSIGHANDLER +PERL_CALLCONV Signal_t Perl_sighandler(int sig, Siginfo_t *info, void *uap); +#define PERL_ARGS_ASSERT_SIGHANDLER +#endif #if defined(UNLINK_ALL_VERSIONS) PERL_CALLCONV I32 Perl_unlnk(pTHX_ const char* f); #define PERL_ARGS_ASSERT_UNLNK \ |