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-us...@perl.org <mailto: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 <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
>