From fb5e77103dd443cc2112ba14dc665aa5ec072ce6 Mon Sep 17 00:00:00 2001 From: Tony Cook <tony@develop-help.com> Date: Wed, 30 May 2018 14:03:04 +1000 Subject: [PATCH] (perl #122112) test for signal handler death in pclose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Petr Písař <ppisar@redhat.com> --- t/io/pipe.t | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/t/io/pipe.t b/t/io/pipe.t index f9ee65afe8..1d01db6af6 100644 --- a/t/io/pipe.t +++ b/t/io/pipe.t @@ -10,7 +10,7 @@ if (!$Config{'d_fork'}) { skip_all("fork required to pipe"); } else { - plan(tests => 25); + plan(tests => 27); } my $Perl = which_perl(); @@ -241,3 +241,24 @@ SKIP: { is($child, -1, 'child reaped if piped program cannot be executed'); } + +{ + # [perl #122112] refcnt: fd -1 < 0 when a signal handler dies + # while a pipe close is waiting on a child process + my $prog = <<PROG; +\$SIG{ALRM}=sub{die}; +alarm 1; +\$Perl = "$Perl"; +my \$cmd = qq(\$Perl -e "sleep 3"); +my \$pid = open my \$fh, "|\$cmd" or die "\$!\n"; +close \$fh; +PROG + print $prog; + my $out = fresh_perl($prog, {}); + $::TODO = "not fixed yet"; + cmp_ok($out, '!~', qr/refcnt/, "no exception from PerlIO"); + undef $::TODO; + # checks that that program did something rather than failing to + # compile + cmp_ok($out, '=~', qr/Died at/, "but we did get the exception from die"); +} -- 2.20.1