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-us...@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> 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>> 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 >> > > >