From 62b3ff7b2c41b4a7e15f4677d7a9fb9c9f1d8360 Mon Sep 17 00:00:00 2001 From: Jacob Bachmeyer Date: Wed, 8 Feb 2023 23:07:26 -0600 Subject: Improve test for blocked signals This fixes ERRORs reported by: * t/parallel-tests-interrupt.tap * t/self-check-exit.tap * t/self-check-is-blocked-signal.tap * t/tap-signal.tap * t/ax/am-test-lib.sh (is_blocked_signal): Revise Perl code to more closely follow documented interfaces where available. This also works around bugs and limitations of the POSIX module in Perl 5.6. Copyright-paperwork-exempt: yes --- t/ax/am-test-lib.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh index bdf699889..bfa1d84b2 100644 --- a/t/ax/am-test-lib.sh +++ b/t/ax/am-test-lib.sh @@ -103,13 +103,14 @@ is_blocked_signal () # Use perl, since trying to do this portably in the shell can be # very tricky, if not downright impossible. For reference, see: # - if $PERL -w -e ' - use strict; - use warnings FATAL => "all"; - use POSIX; - my %oldsigaction = (); - sigaction('"$1"', 0, \%oldsigaction); - exit ($oldsigaction{"HANDLER"} eq "IGNORE" ? 0 : 77); + if $PERL -Mstrict -Mwarnings=FATAL,all -MPOSIX -Mconstant=SN,"$1" -e ' + my $new = POSIX::SigAction->new(sub {}); + my $old = POSIX::SigAction->new(); + { no warnings q[uninitialized]; sigaction(SN, $new, $old) } + my $oldhandler; + if ($old->can(q[handler])) { $oldhandler = $old->handler } + else { $oldhandler = $old->{HANDLER} } + exit ($oldhandler eq "IGNORE" ? 0 : 77); '; then return 0 elif test $? -eq 77; then -- cgit v1.2.1