Done, thanks. https://github.com/rakudo/rakudo/issues/1440
On Mon, Jan 22, 2018 at 4:14 PM, Elizabeth Mattijsen <l...@dijkmat.nl> wrote: > This feels like a bug to me. So please make report this as a potential > issue, either by mailing rakudo...@perl.org, or by creating an issue on > http://github.com/rakudo/rakudo . > > Thank you! > > > On 22 Jan 2018, at 01:24, David E. <da...@empireofgames.com> wrote: > > > > I'm not certain where to report this (ie: rakudo vs MoarVM), so I'm > starting here. > > > > After some experimentation, I finally traced down a segfault I've been > getting to a memory leak in the NativeCall interface. I'm using it to > facilitate testing of a 32-bit embedded (meaning no dynamic allocation) C > library in an easier/more-comprehensive way than I could otherwise -- > though this memory leak is preventing me from running the long-duration > tests that I need to. > > > > I'm currently running 2017.12.1 (commit > > c84ed2942d224e4cd524fa389e0603e4e4642f77) > under a 32-bit Docker Ubuntu image (I started with 2017.10). I can easily > observe the memory leak using "docker stats". At it's worst, with my full > application, I'm seeing approximately 0.01 GiB of memory per second getting > lost. > > > > Below is sample code that is able to reproduce the leak. I believe that > it has something to do with the callback, maybe with the C-string > conversion. > > > > Please advise, > > thanks, > > -David > > > > > > test_memleak.pl6: > > use v6; > > use NativeCall; > > > > constant LIB_DTEST = 'libtestlib.so'; > > > > sub dtest_log_init(&dt_csv_log (Str)) is native(LIB_DTEST) {*}; > > sub test_cb() is native(LIB_DTEST) {*}; > > > > sub dt_csv_log(Str $data) > > { > > prompt "dt_csv_log($data)"; > > } > > > > sub MAIN() > > { > > dtest_log_init(&dt_csv_log); > > > > while 1 { > > # prompt "Call test_cb()"; > > test_cb(); > > } > > } > > > > test_memleak.c: > > #include <stdio.h> > > void (*dtlf)(char* s); > > void dtest_log_init(void (*fp)(char* s)) > > { > > printf("Assigning dtlf to fp=0x%x\n", (int)fp); > > dtlf = fp; > > } > > void test_cb(void) > > { > > dtlf("test_cb"); > > } > > > > The following is a snippet from my Dockerfile that installed perl6: > > && git clone https://github.com/rakudo/rakudo/ /root/rakudo \ > > && echo 'export > > PATH="$HOME/rakudo/install/bin:$HOME/rakudo/install/share/perl6/site/bin:$PATH"' > >> ~/.bashrc \ > > && cd ~/rakudo && git checkout master && git pull \ > > && git checkout $(git describe --abbrev=0 --tags) \ > > && perl Configure.pl --gen-moar --gen-nqp --backends=moar \ > > && make && make install \ > > >