See message below - sending from gmail since my original post didn&#39;t make it through (spam filter ate it?).<br><br>---------- Forwarded message ----------<br><span class="gmail_quote">From: <b class="gmail_sendername">
Tim Robbins</b> &lt;<a href="mailto:tim@tjr.id.au">tim@tjr.id.au</a>&gt;<br>Date: May 5, 2007 9:14 AM<br>Subject: Fw: [asterisk-dev] 1.4/trunk chan_iax2.c stability/deadlocks<br>To: <a href="mailto:tjrobbins@gmail.com">tjrobbins@gmail.com
</a><br><br></span><br>----- Original Message -----<br>From: &quot;Tim Robbins&quot; &lt;<a href="mailto:tim@tjr.id.au">tim@tjr.id.au</a>&gt;<br>To: &quot;Asterisk Developers Mailing List&quot; &lt;<a href="mailto:asterisk-dev@lists.digium.com">
asterisk-dev@lists.digium.com</a>&gt;<br>Sent: Friday, May 04, 2007 6:54 PM<br>Subject: Re: [asterisk-dev] 1.4/trunk chan_iax2.c stability/deadlocks<br><br><br>&gt; We recently attempted the jump from 1.0 to 1.4 on our production systems
<br>&gt; and were seeing IAX2-related crashes every couple of minutes until we<br>&gt; rolled back. After some debugging efforts and fairly brutal load tests,<br>&gt; we&#39;re hopefully ready to try again some time soon.
<br>&gt;<br>&gt; The issues we found and fixed were:<br>&gt; - Null pointer dereferences when racing with another thread trying to<br>&gt; destroy the tech-private data in a few places. This happens when the<br>&gt; iaxsl[] mutex is released then reacquired without checking that the call
<br>&gt; is still there (iaxs[x] != NULL). We only saw it happen in iax2_indicate()<br>&gt; and function_iaxpeer() (&quot;CURRENTCHANNEL&quot; case), but there are theoretical<br>&gt; problems in iax2_bridge() and socket_process() (IAX_COMMAND_NEW &quot;TBD&quot;
<br>&gt; case). Everywhere else in chan_iax2.c either (a) checks that the pvt is<br>&gt; non-null after acquiring the lock, or (b) is fairly safe since it&#39;s<br>&gt; working on a newly-allocated call. This is part of Mantis bug #9084.
<br>&gt; - ast_channel_free() tries to free tech_pvt pointer in some error cases,<br>&gt; but tech_pvt is not a heap pointer for IAX2 channels (it&#39;s the callno cast<br>&gt; to a void *). I don&#39;t know exactly what triggers these error cases. This
<br>&gt; is Mantis bug #9103.<br>&gt; - Apparent use-after-free bug in prune_peers() - destroy_peer() /<br>&gt; AST_LIST_REMOVE_CURRENT() in the wrong order. Only likely to happen with<br>&gt; rtautoclear=yes.<br>&gt; - rtautoclear=yes only removes peers, not users. This might result in the
<br>&gt; users list growing too large.<br>&gt;<br>&gt; Other things we noticed:<br>&gt; - find_callno() is really slow, especially when Realtime is being used<br>&gt; with a relatively slow backend (e.g. MySQL). If one of the IAX worker
<br>&gt; threads sleeps with an iaxsl[] mutex held while waiting for the backend to<br>&gt; respond, the other threads get stuck waiting to acquire that mutex.<br>&gt; Russell&#39;s hashing code will mitigate this once the issues are sorted out.
<br>&gt; It&#39;s likely that the code is perfectly fine but exposes race conditions<br>&gt; that wouldn&#39;t have been possible when threads were being effectively<br>&gt; serialized by find_callno().<br>&gt;<br>&gt; Unfortunately I&#39;m not able to contribute patches at this stage, but these
<br>&gt; issues are fairly easy to fix.<br>&gt;<br>&gt; Tim<br>&gt;<br>&gt; ----- Original Message -----<br>&gt; From: &quot;Stephen Davies&quot; &lt;<a href="mailto:stephen.l.davies@gmail.com">stephen.l.davies@gmail.com</a>
&gt;<br>&gt; To: &quot;Asterisk Developers Mailing List&quot; &lt;<a href="mailto:asterisk-dev@lists.digium.com">asterisk-dev@lists.digium.com</a>&gt;<br>&gt; Sent: Friday, May 04, 2007 5:59 AM<br>&gt; Subject: [asterisk-dev] 
1.4/trunk chan_iax2.c stability/deadlocks<br>&gt;<br>&gt;<br>&gt;&gt; Hi,<br>&gt;&gt;<br>&gt;&gt; I recently moved our IAX service servers on to SVN trunk.<br>&gt;&gt;<br>&gt;&gt; Seems to me that a lot of people are still on 
1.2, and so I thought I<br>&gt;&gt; should do my bit and put the trunk code into production and see what<br>&gt;&gt; happens and fix whatever comes my way.&nbsp;&nbsp;Cos we need 1.4 to be stable.<br>&gt;&gt;<br>&gt;&gt; So what has happened is segfaults and deadlocks in chan_iax2.
<br>&gt;&gt; Probably on average once a day.&nbsp;&nbsp;Of course this is to do with the new<br>&gt;&gt; multi-threaded stuff in there.<br>&gt;&gt;<br>&gt;&gt; Is my experience the norm for those using iax2 on 1.4/trunk?<br>&gt;&gt;
<br>&gt;&gt; So I&#39;ve been working on my coredumps and fixing the issues - I&#39;ll<br>&gt;&gt; upload onto Mantis once I&#39;ve seen whether my fixes are proving<br>&gt;&gt; effective.<br>&gt;&gt;<br>&gt;&gt; Are others running 
1.4 in iax intensive environments?&nbsp;&nbsp;Are there<br>&gt;&gt; others prepared to take some pain to try to chase down these issues?<br>&gt;&gt;<br>&gt;&gt; Thanks,<br>&gt;&gt; Steve<br>&gt;&gt; _______________________________________________
<br>&gt;&gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt;&gt;<br>&gt;&gt; asterisk-dev mailing list<br>&gt;&gt; To UNSUBSCRIBE or update options visit:<br>&gt;&gt;&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">
http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>&gt;<br><br>