[asterisk-dev] [Code Review] 2427: IAX2, prevent network thread starting before all helper threads are ready

Matt Jordan reviewboard at asterisk.org
Thu Apr 11 16:00:24 CDT 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2427/#review8243
-----------------------------------------------------------

Ship it!


Ship It!

- Matt Jordan


On April 5, 2013, 7:13 a.m., Alec Davis wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/2427/
> -----------------------------------------------------------
> 
> (Updated April 5, 2013, 7:13 a.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Bugs: ASTERISK-18827
>     https://issues.asterisk.org/jira/browse/ASTERISK-18827
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> If the first network message was received before iax2_process_thread() was sleeping, the thread would go to sleep, and sleep forever, with deferred frames banking up.
> 
> start_network_thread() creates the initial helper threads and the network_thread at the same time (near enough), with no checks that the helper threads were ready before the network thread was created.
> 
> Each iax2_process_thread() is required to be at 'ast_cond_wait(&thread->cond, &thread->lock)' before any messages can be accepted.
> To achieve this, only start the network_thread after each of the helper threads is ready.
> 
> The fix is the same method as find_idle_thread() uses when an iax dynamic thread is created, that then waits for the init_cond to be satisfied.
> 
> 
> Diffs
> -----
> 
>   trunk/channels/chan_iax2.c 376441 
> 
> Diff: https://reviewboard.asterisk.org/r/2427/diff/
> 
> 
> Testing
> -------
> 
> Prior to fix, iax show threads had thread 1 never finishing, with actions = 0, which means it never got processed.
> ...
> Thread 10: state=0, update=6, actions=1, func=''
> Active Threads:
> Thread P1: state=1, update=1365045454, actions=0, func='socket_process'
> Dynamic Threads:
> 10 of 10 threads accounted for with 0 dynamic threads
> 
> after fix, works as expected.
> 
> 
> Thanks,
> 
> Alec Davis
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20130411/4ceb5d51/attachment.htm>


More information about the asterisk-dev mailing list