[asterisk-dev] How does a call to ast_read end up in ast_write

Stephen Davies stephen.l.davies at gmail.com
Wed Dec 26 15:24:04 CST 2007


Hi Moy,

On 24/12/2007, Moises Silva <moises.silva at gmail.com> wrote:
>
> but, the answer
> to your question about how a ast_read() ends up in ast_write is that,
> in Asterisk, writing is "tied" to reading. That is, as frames arrive,
> frames go out. So each time an ast_read() is done in some channel,
> Asterisk will check if the channel has a generator active and it will
> give it a chance to generate a frame to be written to the channel.



Thanks for the reply and the explanation.  (Which makes sense).


Now in this problem case, both of the Local/ channels (Local/ext at context,1
and Local/ext at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-dev/attachments/20071226/ffd44e81/attachment.htm 


More information about the asterisk-dev mailing list