# New Ticket Created by  Jonathan Stowe 
# Please include the string:  [perl #127700]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=127700 >


The following code will segfault after some thousand iterations:

#!perl6

use NativeCall;

my $samplerate = 44100;
my $frequency = 440;

sub gen-sin(Int $sample-rate, Int $frequency) {
    gather {
        loop { 
            for (0 .. ($samplerate/$frequency)).map({ 
sin(($_/($samplerate/$frequency)) * (2 * pi))}) -> $val {
                take $val;
            }
        }
    }
}

my $chan = Channel.new;

start {
    for gen-sin($samplerate, $frequency).rotor(256) -> @a {
        my $c = CArray[num32].new(flat @a Z @a);
        $chan.send([$c, 256]);
    }
}

sleep 5;

my $now = now;
react {
    whenever $chan {
        sleep 256/44100;
        say now - $now;
        $now = now;
    }
}

# vim: expandtab shiftwidth=4 ft=perl6

Giving rise to (gdb output):

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffeffff700 (LWP 5923)]
0x00007ffff7aeb4ef in MVM_args_slurpy_named ()
   from /home/jonathan/.rakudobrew/moar-nom/install/lib/libmoar.so
Missing separate debuginfos, use: dnf debuginfo-install 
glibc-2.21-12.fc22.x86_64
(gdb) bt full
#0  0x00007ffff7aeb4ef in MVM_args_slurpy_named ()
   from /home/jonathan/.rakudobrew/moar-nom/install/lib/libmoar.so
No symbol table info available.
#1  0x00007ffff7af1446 in MVM_interp_run ()
   from /home/jonathan/.rakudobrew/moar-nom/install/lib/libmoar.so
No symbol table info available.
#2  0x00007ffff7b0de7e in start_thread ()
   from /home/jonathan/.rakudobrew/moar-nom/install/lib/libmoar.so
No symbol table info available.
#3  0x00007ffff7bcb3a7 in uv.thread_start ()
   from /home/jonathan/.rakudobrew/moar-nom/install/lib/libmoar.so
No symbol table info available.
#4  0x0000003539c07555 in start_thread () from /lib64/libpthread.so.0
No symbol table info available.
#5  0x0000003539902ded in clone () from /lib64/libc.so.6
No symbol table info available.

I'm guessing that it's the the Channel.send

This is Rakudo version 2016.02-136-g3a050fb built on MoarVM version 
2016.02-25-gada3752

P.S. If the loop that feeds the channel could be at least 10x faster that would 
be lovely kthx ;-)

Reply via email to