[asterisk-dev] [Code Review] Hints and devices from hints moved to ao2_container

reviewboard at asterisk.org reviewboard at asterisk.org
Thu Nov 11 14:08:06 CST 2010


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


I just thought I would point out the a few new problematic areas I found while merging up.


trunk/main/pbx.c
<https://reviewboard.asterisk.org/r/1003/#comment6129>

    I went out of order. Refer to comment on line 7053.



trunk/main/pbx.c
<https://reviewboard.asterisk.org/r/1003/#comment6130>

    Same here.



trunk/main/pbx.c
<https://reviewboard.asterisk.org/r/1003/#comment6128>

    Essentially any time the hints container is iterated over, the hints extension may be destroyed before the hint is locked. So if there are any unsafe operations that are going to happen on the extension, we need to check if it is NULL first.


- Jeff


On 2010-11-09 02:34:19, schmidts wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1003/
> -----------------------------------------------------------
> 
> (Updated 2010-11-09 02:34:19)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Summary
> -------
> 
> handle_statechange in pbx.c has a very great impact on call handling performance. i have noticed this several times and i have written a solution which makes handle_statechange handling 61 times faster.
> 
> i have used the patch (rev. 293802 for 1.4) from russellb and jeffpeeler to also fix a deadlock problem and their part to move hints to an ao2_container.
> 
> after thinking about the best solution IMO iterating through the whole hint list/container to maybe find a hint with a matching device is very expensive way. So i have used a own container for devices which just have a link back to their hint. 
> This means there is a hashed cmp for devices which gives back a multiple object ao2_iterator for all hints, this device, which have a state change, is used in. 
> 
> these devices are not longer limited to any length so its possible to use a hint for 100 peers at once.
> 
> Tilghman Lesher noticed on the dev-list what would happen when a dynamic hint is used. I have tried this with one dynamic hint and subscribe up to 2500 different users on this, several times and it works just fine. If a subscribe for a dynamic hint comes in, a static extension with static appdata is generated which acts like a normal hint so there is no problem on this. 
> 
> 
> Diffs
> -----
> 
>   trunk/include/asterisk.h 294045 
>   trunk/main/asterisk.c 294045 
>   trunk/main/pbx.c 294045 
> 
> Diff: https://reviewboard.asterisk.org/r/1003/diff
> 
> 
> Testing
> -------
> 
> dialplan reload drops all devices out of the device container and recreate them by their callback list.
> core show hint / hints show all hints also dynamic and their watchers
> 
> 
> loadtests shows the following result:
> 
> orig version: 
> handle_statechange COUNTER: 10009 overalltime: 7041 ms 
> MAX: 365 CPS
> 
> patched version:
> handle_statechange COUNTER: 10009 overalltime: 115 ms
> MAX: 580 CPS
> 
> same setup, same config tested with sipp.
> 
> 
> Thanks,
> 
> schmidts
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-dev/attachments/20101111/049a7941/attachment.htm 


More information about the asterisk-dev mailing list