On Tue, 16 Sep 2014 13:47:14 -0700, LeonT wrote:
> On Sun Sep 07 15:36:08 2014, LeonT wrote:
> > As per subject, Proc::Async's streams may call &done() before calling
> > their &tap/&act for the last time. Take for example this code:
> > 
> > my $num = @*ARGS.shift // 3;
> > 
> > my @procs = (1..$num).map( -> $count {
> >   my $proc = Proc::Async.new(:path('echo'), :args(<Hello World>));
> >   my $input = $proc.stdout_chars();
> >   $input.act(-> $input { say "$count: " ~ $input.chomp }, :done({ say
> > "$count is done" }));
> >   { :$proc, :$input, :done($proc.start()) };
> > });
> > 
> > await @procs.map(*.<done>);
> > 
> > It will give a non-deterministic output, that will typically look
> > something like this:
> > 
> > 1 is done
> > 1 is done
> > 1: Hello World
> > 2: Hello World
> > 2 is done
> > 2 is done
> > 3 is done
> > 3 is done
> >  3: Hello World
> > 
> > (the double done's are reported as #122714)
> > 
> > It sometimes also includes errors such as:
> > 
> > Unhandled exception in code scheduled on thread 140254841403136
> > 
> > or
> > 
> > This representation (Null) does not support elems
> > 
> > Not sure what's going on exactly, but this is limiting the use of the
> > output Supplies greatly.
> 
> The attached patch should fix this, but I'm not sure how to test this well.
> 
It seems in the meantime an equivalent patch has been applied to address this 
same issue:

https://github.com/rakudo/rakudo/blob/nom/src/core/Proc/Async.pm#L258

And I've not seen anything like this issue show up in a long time, so I think 
this can be considered resolved now.

/jnthn

Reply via email to