Hi Rolf,<br><br><div><br></div><div>Reviewing <span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><b>0004-io-layer-Improve-waiting-on-processes-a-lot.patch:</b></span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><b><br></b></span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><b><br></b></span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space: pre; ">        </span>// Ensure we&#39;re not in here in multiple threads at once, nor recursive.</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">        </span>if (InterlockedIncrement (&amp;mono_processes_cleaning_up) &gt; 1) {</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>InterlockedDecrement (&amp;mono_processes_cleaning_up);</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space: pre; ">                </span></span></div>
</div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">Use the standard idiom of CAS (&amp;zzz, 0, 1) instead of doing 2 atomic ops.</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div><div style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">
<br></div><div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space: pre; ">                        </span>if (mono_processes_soft_lock != 0) {</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                                </span>/* The sigchld handler is watching us. Spin a bit and try again */</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                                </span>_wapi_handle_spin (1);</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space: pre; ">                        </span>} else {</span></div>
</div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">This code doesn&#39;t make much sense to me. You spin with the mono_processes_mutex lock held</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">only to drop it later to reacquire straight away. You must use an exponential backoff since the other</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">thread might be blocked for a significant amount of time.</span></div><div>
<span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">Overall the patch is ok, thou I have two comments, first that the style of reclamation is kludgy, we</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">would be better with </span><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">SMR; second that, if I understand correctly, we only free process data when its</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">managed object is </span><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">collected or another process is spawned, right?</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">On other notes, your code mixes C and C++ styles comments, stick with C style, please. You&#39;re</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">not following our code conventions in a few places too:</span></div><div>
<span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><div>
+static void mono_processes_cleanup (void)</div><div><br></div><div>Should be:</div><div>static void</div><div><meta charset="utf-8">mono_processes_cleanup (void)</div></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><br>
</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div></font></div>