[asterisk-dev] when to lock a channel
lumen
lumen at bulma.net
Wed May 7 11:16:33 CDT 2008
On Wednesday 07 May 2008 05:36:09 pm Russell Bryant wrote:
> lumen wrote:
> > There is a way or notation to know if a function in channel.h, features.h
> > or whatever needs a channel lock previous to be called?
>
> The doxygen documentation _should_ indicate that. However, in most cases
> it does not. I have added it in some places, but there is more to do.
> Patches to improve the documentation are certainly welcome!
>
Ok. That question comes to me becouse I'm modifiying PlayDtmf manager action
(app_senddtmf.c) to support a sequence of dtmf characters to be send to a
channel, instead of accepting only on digit at a time. I do this calling
ast_stream_dtmf instead ast_send_digit in the code of PlayDtmf.
Original code of PlayDtmf manager action, lock the channel previous to call
ast_send_digit, and I don't know if I have to do the same with
ast_stream_dtmf.
> > There is a problem if many threads call ast_write(chan,frame) in the same
> > channel ?
>
> No, ast_write() locks the channel. However, I do wonder why you would ever
> write code such that multiple threads are writing to the same channel ...
When a channel get bridged to another using Bridge manager action, a thread is
created to manage that bridge. That thread calls ast_write on both channels
to transfer frames between them.
I was wondering if it's possible from PlayDtmf manager action to, instead of
locking the channel and call ast_stream_dtmf, queuing dtmf frames to channel
throung ast_write.
Maybe that idea seams stupid. I'm browsing the asterisk source code only for
few days.
More information about the asterisk-dev
mailing list