This is a well-known problem in IPC. If you don't do it async, you risk
the buffer you're not currently reading from filling up completely. Now
your client program is trying to write to stderr, but can't because it's
full. Your parent program is hoping to read from stdin, but nothing is
arriving, and it never reads from stderr, so it's a deadlock.
Wouldn't call this a rakudo bug.
On 07/03/18 23:04, Christian Bartolomaeus via RT wrote:
> On Fri, 10 Feb 2017 23:48:54 -0800, barto...@gmx.de wrote:
>> FWIW that hangs on FreeBSD as well (maybe not too much a surprise,
>> given the relationship of the OSes).
> Hmm, looks like it hangs on Linux too -- with more than 224000 bytes on my
> machine:
>
> $ perl6 -e 'my $proc = run($*EXECUTABLE, "-e", q| $*ERR.print("8" x
> 224001);|,:out,:err); say $proc.out.slurp' ## hangs
> ^C
> $ perl6 --version
> This is Rakudo Star version 2017.10 built on MoarVM version 2017.10
> implementing Perl 6.c.
> $ uname -a
> Linux p6 3.2.0-4-amd64 #1 SMP Debian 3.2.96-2 x86_64 GNU/Linux

This is a well-known problem in IPC. If you don't do it async, you risk
the buffer you're not currently reading from filling up completely. Now
your client program is trying to write to stderr, but can't because it's
full. Your parent program is hoping to read from stdin, but nothing is
arriving, and it never reads from stderr, so it's a deadlock.
Wouldn't call this a rakudo bug.
On 07/03/18 23:04, Christian Bartolomaeus via RT wrote:
> On Fri, 10 Feb 2017 23:48:54 -0800, barto...@gmx.de wrote:
>> FWIW that hangs on FreeBSD as well (maybe not too much a surprise,
>> given the relationship of the OSes).
> Hmm, looks like it hangs on Linux too -- with more than 224000 bytes on my
> machine:
>
> $ perl6 -e 'my $proc = run($*EXECUTABLE, "-e", q| $*ERR.print("8" x
> 224001);|,:out,:err); say $proc.out.slurp' ## hangs
> ^C
> $ perl6 --version
> This is Rakudo Star version 2017.10 built on MoarVM version 2017.10
> implementing Perl 6.c.
> $ uname -a
> Linux p6 3.2.0-4-amd64 #1 SMP Debian 3.2.96-2 x86_64 GNU/Linux

On Fri, 10 Feb 2017 23:48:54 -0800, barto...@gmx.de wrote:
> FWIW that hangs on FreeBSD as well (maybe not too much a surprise,
> given the relationship of the OSes).
This still hangs on MoarVM, but works on JVM (I didn't check the behaviour on
JVM last year):
$ ./perl6-j -e 'my $proc = run($*EXECUTABLE, "-e", q| $*ERR.print("8" x
8193);|,:out,:err); say $proc.out.slurp-rest; say "alive"'
alive
$ ./perl6-j --version
This is Rakudo version 2018.02.1-124-g8d954027f built on JVM
implementing Perl 6.c.

# New Ticket Created by Lloyd Fournier
# Please include the string: [perl #127682]
# in the subject line of all future correspondence about this issue.
# https://rt.perl.org/Ticket/Display.html?id=127682 >
perl6 -e 'my $proc = run($*EXECUTABLE, "-e", q| $*ERR.print("8" x
8193);|,:out,:err);
say $proc.out.slurp-rest' #hangs forever
If you swap $*ERR with $*OUT and $proc.out with $proc.err the same thing
happens. I dunno whether it's a problem with the process reading or the
process writing.
I made RT #127681 ( which is the same thing and can be closed ) today. But
now that I have golfed it to this I felt it deserved its own ticket.