Hi Moy,<br><br><div><span class="gmail_quote">On 24/12/2007, <b class="gmail_sendername">Moises Silva</b> <<a href="mailto:moises.silva@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">moises.silva@gmail.com
</a>> 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 "tied" 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> </div><div>Thanks for the reply and the explanation. (Which makes sense).
</div><div><br> </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. That leaves no "outside" source for frames - in that situation I'm finding it hard to imagine what will happen. At one level it doesn't really matter, there's no-one to hear what is generated (if anything). But its clear from these deadlocks that the Local channels become deadlocked somehow in this situation. Which doesn't do anything immediately. 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> </div>