Hi guys,<div><br></div><div>I've created a project that reliably reproduces 2 bugs, the mentioned JIT crash, and just plain segmentation fault even without stack traces: <a href="https://github.com/anakryiko/mono-jit-crash-repro">https://github.com/anakryiko/mono-jit-crash-repro</a></div>

<div><br></div><div>From readme:</div><div><br></div><div><div>mono-jit-crash-repro</div><div>====================</div><div><br></div><div>Reproduction of problems with Mono JIT crashing.</div><div><br></div><div>To run reproduce, compile the solution and run **run.sh** script which will start the binary in a loop until the program crashes. It usually doesn't take long for crash or segmentation fault to occur, though it can take up to few thousands runs.</div>

<div><br></div><div>There are two classes that reproduces two bugs:</div><div><br></div><div>  * **ReproJitCrash.cs** reproduces JIT crash most of the times. Rarely it also causes segmentation fault without any stack traces.</div>

<div>  * **ReproSegFault.cs** reproduces segmenation fault with no stack trace (as mentioned previously).</div><div>  </div><div>The only difference between those two cases is in using *struct* vs *class* with **using** statement (see LockReleaserStruct/LockReleaserClass).</div>

<div><br></div><div>Also, it seems essential to have Monitor.Enter/Monitor.Exit, without them it's not reproducible (or at least I didn't have patience to wait for crash to happen).</div></div><div><br></div><div>

Hope that helps to identify and fix the problem.</div><div><br></div><div>-- Andrii Nakryiko</div><div class="gmail_extra"><br clear="all"><div>-- Andrii Nakryiko</div><br>
<br><br><div class="gmail_quote">2012/12/6 Rodrigo Kumpera <span dir="ltr"><<a href="mailto:kumpera@gmail.com" target="_blank">kumpera@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">On Thu, Dec 6, 2012 at 12:38 PM, Andrii Nakryiko <span dir="ltr"><<a href="mailto:andrii.nakryiko@gmail.com" target="_blank">andrii.nakryiko@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>It's not about that particular method, we got earlier same kind of crashes on different methods, for instance, ProtoBuf.Serializers.ArrayDecorator:Write ()</div>


<div>If I remember correctly, I got this crash even for some method on List<T>, though I can't locate that log quickly. If I get it, will post here. </div>

<div>Also, this bug manifests on different versions of Mono (< 3.0).</div></blockquote><div><br></div></div><div>So the problem is not miscompilation. It might be memory corruption related. Can you try running it under valgrind or any other malloc debug tools?</div>


<div>Does it always crash on that particular g_assert? If it does, it's a matter of augmenting it to produce a better crash message.</div><div class="im"><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div></div><div>This behavior is very randomly reproducible. To give you some context, we constantly run "test scenarios" where we start our TestClient in a loop. TestClient does some work and then exits. Then our shell script starts TestClient again. And sometimes TestClient crashes with error I described. What is interesting, crash mostly occurs not on first run of TestClient during this test scenario. Maybe that can help somehow.</div>


</blockquote><div><br></div></div><div>Then please try to reduce it to a test case that is small enough so we can work on. </div><div class="im"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>Can using LLVM back-end help to mitigate this?</div></blockquote><div><br></div><div><br></div></div><div>I have no reason to believe that the LLVM backend would help here. </div></div></div>
</blockquote></div><br></div>