From a70e0540b53a137a8b30cd4c2426c33e2c8e9720 Mon Sep 17 00:00:00 2001 From: HAYASHI Date: Wed, 23 Sep 2015 12:22:23 +0200 Subject: [PATCH] Propagete PerlIO return value from STORE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On Thu, 12 Feb 2015 14:52:48 GMT, ppisar wrote: > Dne Čt 12.úno.2015 09:51:59, ppisar napsal(a): > > I found this change causing a dead-lock in Debug-Client-0.29 tests > > (see ). I don't > > know which party is more guilty, but I observe that perl debugger does > > not emit "DB<1>" prompt if it is run from the Debug-Client's test, so > > it does not process client "c" command and everything halts. > > I should note that I use perl 5.20.1. Here is a fix. I don't know why 1.26 fails or why this works. Petr Pisar: Patch for 1.26 ported to 1.27. CPAN RT#101078 Signed-off-by: Petr Písař --- Gnu.pm | 3 +-- Gnu.xs | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Gnu.pm b/Gnu.pm index 4701589..298d567 100644 --- a/Gnu.pm +++ b/Gnu.pm @@ -734,9 +734,8 @@ sub STORE { } elsif ($type eq 'F') { return _rl_store_function($value, $id); } elsif ($type eq 'IO') { - my $FH = $value; # Pass filehandles to the GNU Readline Library - _rl_store_iostream($value, $id); + my $FH = _rl_store_iostream($value, $id); # pop stdio layer pushed by PerlIO_findFILE(). # https://rt.cpan.org/Ticket/Display.html?id=59832 my @layers = PerlIO::get_layers($FH); diff --git a/Gnu.xs b/Gnu.xs index cb91a2c..5bf0845 100644 --- a/Gnu.xs +++ b/Gnu.xs @@ -3147,7 +3147,7 @@ _rl_fetch_int(id) } } -void +PerlIO * _rl_store_iostream(stream, id) PerlIO *stream int id @@ -3157,9 +3157,11 @@ _rl_store_iostream(stream, id) switch (id) { case 0: rl_instream = PerlIO_findFILE(stream); + RETVAL = stream; break; case 1: rl_outstream = PerlIO_findFILE(stream); + RETVAL = stream; #ifdef __CYGWIN__ { /* Cygwin b20.1 library converts NL to CR-NL @@ -3176,11 +3178,14 @@ _rl_store_iostream(stream, id) break; default: warn("Gnu.xs:_rl_store_iostream: Illegal `id' value: `%d'", id); + XSRETURN_UNDEF; break; } PerlIO_debug("TRG:store_iostream id %d fd %d\n", - id, PerlIO_fileno(stream)); + id, PerlIO_fileno(RETVAL)); } + OUTPUT: + RETVAL #if 0 /* not used since 1.26 */ -- 2.4.3