Hi Moy,<br><br><div><span class="gmail_quote">On 24/12/2007, <b class="gmail_sendername">Moises Silva</b> &lt;<a href="mailto:moises.silva@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">moises.silva@gmail.com
</a>&gt; wrote:</span><blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">
but, the answer<br>to your question about how a ast_read() ends up in ast_write is that,<br>in Asterisk, writing is &quot;tied&quot; to reading. That is, as frames arrive,<br>frames go out. So each time an ast_read() is done in some channel,
<br>Asterisk will check if the channel has a generator active and it will<br>give it a chance to generate a frame to be written to the channel.</blockquote><div><br>&nbsp;</div><div>Thanks for the reply and the explanation. &nbsp;(Which makes sense).
</div><div><br>&nbsp;</div><div>Now in this problem case, both of the Local/ channels (Local/ext@context,1 and Local/ext@context,2) are running a generator. &nbsp;That leaves no &quot;outside&quot; source for frames - in that situation I&#39;m finding it hard to imagine what will happen. &nbsp;At one level it doesn&#39;t really matter, there&#39;s no-one to hear what is generated (if anything). &nbsp;But its clear from these deadlocks that the Local channels become deadlocked somehow in this situation. &nbsp;Which doesn&#39;t do anything immediately. &nbsp;But when one of the parties tried to unhold the call, the main SIP signalling thread gets blocked and that breaks ALL SIP traffic.
</div><br>&nbsp;</div>