On Wed, 06 Sep 2017 13:46:15 -0700, j.david.l...@apple.com wrote: > This short program hangs indefinitely on my system (after making > progress.) Tuning the number of threads and number of iterations can > change how reliably it hangs (down to 'never' when the number of > threads is < 3, for me.) > > ``` > #!/usr/bin/env perl6 > > use v6.c; > > await (^6).map: -> $t { > start { > for (^500) -> $i { > my $current = %( 1 => %( 2 => %( 3 => %() ) ) ); > my $index = 1; > while $current{$index}:exists { > say "$t $i $index"; > $current = $current{$index}; > ++$index; > } > } > } > } > ``` > > ... this is a distilled version of some tree-walking code that's > misbehaving for me IRL. It's possible that I'm doing something naughty > here, but I don't see how. Am I missing something? (I can eliminate > the deadlock by Lock.protect-ing the inner while loop, FWIW... but I > don't see why that should be necessary.) > > More information: > > ``` > $ perl6 --version > This is Rakudo version 2017.07 built on MoarVM version 2017.07 > implementing Perl 6.c. > ``` This can be golfed to:
my $foo = 0; for ^50000 { start { say $foo++ } }; Rakudo 2017.03 or earlier does not have this issue. You can also remove the `say` from the examples and they do not have this issue. gdb output: https://gist.github.com/ugexe/cf2350b4bd5ed58e3a8f6e049df1432f irc discussion: https://irclog.perlgeek.de/perl6-dev/2017-09-06#i_15127640