Wow that was fast! Thanks Liz!
On Thu, Apr 7, 2022 at 3:25 AM Elizabeth Mattijsen <l...@dijkmat.nl> wrote: > Fixed with > https://github.com/rakudo/rakudo/commit/5658f4da07b44d492a3d35d57fa76939822d2c66 > > Thanks for the report! > > > On 7 Apr 2022, at 11:28, David Emanuel da Costa Santiago < > deman...@gmail.com> wrote: > > > > > > Thanks for the information! > > > > I opened a bug in rakudo: > > > > https://github.com/rakudo/rakudo/issues/4853 > > > > > > Regards, > > David Santiago > > > > > > Às 05:27 de 07/04/22, yary escreveu: > >> For what it's worth, I'm on a mac, promise_test.raku hangs for me once > in a while also. > >> Welcome to Rakudo(tm) v2021.04. > >> Implementing the Raku(tm) programming language v6.d. > >> Built on MoarVM version 2021.04. > >> Trying to reduce it, I would like to find a program that reliably > tickles this bug and hangs every time... this variation does not crash for > me (I ran it 100x) > >> ### close_much.raku ### > >> my Channel $ch .= new; > >> my @proms = (1..2000).map: { > >> start react { > >> whenever $ch.closed { done } > >> } > >> }; > >> $ch.close; > >> await Promise.allof(@proms); > >> say $*VM; > >> ### > >> this does not crash for me > >> ### supply_to_many.raku ### > >> my Channel $ch .= new; > >> my $p1 = Supply.interval(3); > >> my @proms = (1..2000).map: { > >> start react { > >> whenever $p1 { $ch.close } > >> whenever $ch.closed { done } > >> } > >> }; > >> await Promise.allof(@proms); > >> say $*VM; > >> ### > >> This gives a sensible error "Cannot send a message on a closed channel" > >> ### close_then_send.raku ### > >> my Channel $ch .= new; > >> # Close first, send next > >> $ch.close; > >> $ch.send("Hi!"); > >> ### > >> This does not crash for me, for different combinations of $senders & > $receivers (1000,1) (1,1000) (1000,1000) > >> ### config_send_recv.raku ### > >> my Channel $ch .= new; > >> my Supply $p1 .= interval(1); > >> my ($senders, $receivers) = (2000,2); > >> my Int $count = 0; > >> my @sends = (1..$senders).map: { > >> start react { > >> whenever $p1 -> $interval { > >> $ch.send($_); > >> $ch.close if ++$count == $senders; > >> } > >> whenever $ch.closed { done } > >> } > >> }; > >> my @proms = (1..$receivers).map: { > >> start react { > >> whenever $ch.closed { > >> done; > >> } > >> whenever $ch -> $data { > >> print "$_=$data|"; > >> } > >> } > >> }; > >> await Promise.allof(@proms,@sends); > >> say $*VM; > >> ### > >> I didn't succeed - fun to try! > >> -y > >> On Tue, Apr 5, 2022 at 3:55 PM William Michels via perl6-users < > perl6-users@perl.org <mailto:perl6-users@perl.org>> wrote: > >> Thanks for the bash loop. I'm seeing a few hangs, also some errors > >> returned saying: > >> "Unhandled exception in code scheduled on thread 4" > >> (MacOS 11.11) > >> On Tue, Apr 5, 2022 at 12:47 PM David Emanuel da Costa Santiago > >> <deman...@gmail.com <mailto:deman...@gmail.com>> wrote: > >> Hi William, > >> when it fails or hangs it doesn't print the last line. > >> Please check attached file for output of the stack. > >> Since the failures are random, it's easier to invoke it in a > loop: > >> bash$ for i in $(seq 100); do raku test.raku; done > >> If nothing is wrong with the code, i'll open a bug in the github. > >> Regards, > >> David Santiago > >> Às 21:37 de 05/04/22, William Michels escreveu: > >> > No problems so far. > >> > > >> > say $*VM; #add as last line, returns: > >> > moar (2021.06) > >> > > >> > On Tue, Apr 5, 2022 at 11:06 AM David Emanuel da Costa > Santiago > >> > <deman...@gmail.com <mailto:deman...@gmail.com> > >> <mailto:deman...@gmail.com <mailto:deman...@gmail.com>>> wrote: > >> > > >> > Hi, > >> > > >> > > >> > > >> > I'm trying to learn about promises, supplies and > >> channels. So i made > >> > this code: > >> > > >> > """ > >> > > >> > my $p1 = Supply.interval(5); > >> > my $p2 = Supply.interval(2); > >> > my Channel $ch = Channel.new; > >> > > >> > my $prom = start react { > >> > whenever $p1 -> $interval { > >> > say "5"; > >> > } > >> > > >> > whenever $p2 -> $interval { > >> > say 2; > >> > } > >> > > >> > whenever $ch.closed { > >> > done; > >> > } > >> > > >> > whenever $ch -> $data { > >> > say "Data: $data"; > >> > } > >> > } > >> > > >> > my $prom2 = start react { > >> > whenever $p1 -> $interval { > >> > $ch.send("5.2"); > >> > $ch.close; > >> > } > >> > whenever $ch.closed { > >> > done; > >> > } > >> > } > >> > > >> > my @proms = ($prom, $prom2); > >> > await Promise.allof(@proms); > >> > > >> > """ > >> > > >> > > >> > > >> > I don't see anything wrong with this but most of the > >> times runs fine, > >> > sometimes hangs, sometimes throw exception. Am i doing > >> something that i > >> > shouldn't be doing? > >> > > >> > $ raku --version > >> > Welcome to Rakudo™ v2022.03-130-g8f7cc0847. > >> > Implementing the Raku® Programming Language v6.d. > >> > Built on MoarVM version 2022.03-13-ga3476e286. > >> > > >> > > >> > > >> > Regards, > >> > David Santiago > >> > > >