<div dir="ltr">Thanks for trying it out.  That gist was a bit of a hash; apologies.<div><br></div><div>I made all the functions static and also put load and unload as NULL in ERL_NIF_INIT, but I get the same results.<div><br></div><div>I ran it under valgrind and got...</div><div><br></div><div><br></div><div><font face="courier new, monospace"># ERL_LIBS=.. valgrind --trace-children=yes erl<br></font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">...</font></div><div><font face="courier new, monospace"><br></font></div><div><span id="docs-internal-guid-59ed9054-6908-5351-14ae-10195e0e3de0"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">Eshell V6.2  (abort with ^G)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">1> </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">1> dlibusb:mytest_io().</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== Thread 18:</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== Invalid read of size 4</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    at 0x8190B56: process_main (beam_hot.h:935)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x80E565E: sched_thread_func (erl_process.c:7719)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x820982B: thr_wrapper (ethread.c:106)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x40FFF46: start_thread (in /lib/<a href="http://libpthread-2.20.so">libpthread-2.20.so</a>)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x41FE97D: clone (in /lib/<a href="http://libc-2.20.so">libc-2.20.so</a>)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  Address 0xfffffffe is not stack'd, malloc'd or (recently) free'd</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== Process terminating with default action of signal 11 (SIGSEGV)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  Access not within mapped region at address 0xFFFFFFFE</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    at 0x8190B56: process_main (beam_hot.h:935)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x80E565E: sched_thread_func (erl_process.c:7719)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x820982B: thr_wrapper (ethread.c:106)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x40FFF46: start_thread (in /lib/<a href="http://libpthread-2.20.so">libpthread-2.20.so</a>)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    by 0x41FE97D: clone (in /lib/<a href="http://libc-2.20.so">libc-2.20.so</a>)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  If you believe this happened as a result of a stack</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  overflow in your program's main thread (unlikely but</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  possible), you can try to increase the size of the</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  main thread stack using the --main-stacksize= flag.</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==  The main thread stack size used in this run was 8388608.</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== HEAP SUMMARY:</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==     in use at exit: 9,020,474 bytes in 157 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==   total heap usage: 211 allocs, 54 frees, 9,490,700 bytes allocated</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== LEAK SUMMARY:</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    definitely lost: 0 bytes in 0 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    indirectly lost: 0 bytes in 0 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==      possibly lost: 14,143 bytes in 41 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==    still reachable: 9,006,331 bytes in 116 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029==         suppressed: 0 bytes in 0 blocks</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== Rerun with --leak-check=full to see details of leaked memory</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== </font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== For counts of detected and suppressed errors, rerun with: -v</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">==9029== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font face="courier new, monospace">Killed</font></span></p><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div><div><span style="font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Line 935 of my beam_hot.h is...</span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div><div><span style="vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font color="#000000" face="Arial" style="font-size:15.4545450210571px">
</font><font color="#000000" face="courier new, monospace">OpCase(is_integer_fx):
    { 
    BeamInstr* next;
    PreFetch(2, next);
    IsInteger(xb(Arg(1)), ClauseFail());  // line 935
    NextPF(2, next);
    }</font></span><span style="font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
</span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">I know little about beam internals.  I don't know if this is useful.</span></div><div><span style="font-size:15px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br></span></div></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 31, 2014 at 4:05 PM, Steve Vinoski <span dir="ltr"><<a href="mailto:vinoski@ieee.org" target="_blank">vinoski@ieee.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Fri, Oct 31, 2014 at 4:33 PM, Daniel Goertzen <span dir="ltr"><<a href="mailto:daniel.goertzen@gmail.com" target="_blank">daniel.goertzen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">I am seeing a segfault that seems to be related to dirty schedulers.  I've reduced the fault to the erlang and C nif module below which executes the same nif with either the io dirty scheduler, the cpu dirty scheduler, or the normal erlang scheduler.<div><br></div><div><div><br></div><div>When I start the emulator and run either dirty nif, I get a segfault. ( see <a href="https://gist.github.com/goertzenator/6237e0200a5f7bf22976" target="_blank">https://gist.github.com/goertzenator/6237e0200a5f7bf22976</a>)</div></div></div></blockquote><div><br></div></span><div>I found it hard to make sense of what's in that gist due to the formatting, so I took your code and built it myself. When I ran it, it failed in your NIF load function, but it failed in a way that didn't make sense because all your function does is return 0. Then I realized none of your C functions were declared static, which means they are global, and I suspected your load() function was clashing with some other function of the same name. I made all your C functions static, rebuilt, and then ran everything and it seems like it worked:</div><div><br></div><div>> c(dlibusb).</div><div>Reading symbols for shared libraries . done</div><div>{ok,dlibusb}</div><div>2> dlibusb:mytest_cpu().<br></div><div>[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok]</div><div>3> dlibusb:mytest_io().</div><div>[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok]</div><div>4> dlibusb:mytest_none().</div><div>[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok] </div><span class="HOEnZb"><font color="#888888"><div><br></div><div>--steve</div></font></span></div></div></div>
</blockquote></div><br></div></div>