[asterisk-dev] [Code Review] app_directed_pickup Implement the ability to remove a channel group on bridged channel

irroot reviewboard at asterisk.org
Thu May 26 13:03:11 CDT 2011



> On 2011-05-26 12:00:55, rmudgett wrote:
> > /trunk/main/channel.c, lines 6445-6450
> > <https://reviewboard.asterisk.org/r/1118/diff/7/?file=16740#file16740line6445>
> >
> >     The defined locking order is the channels container then the channel.  This is not the correct way to fix the deadlock.
> 
> rmudgett wrote:
>     Is the original deadlock still possible?

i will put a log message on if you want and try catch it ...

i have seen this regualarly under the following circumstances 
ring all group 5+ phones not attended in evenings simultaneous pickups triggered ...

 ast_channel_masquerade is called with channel locked it should not be ... 

/*!
 * \brief Masquerade a channel
 *
 * \note Assumes _NO_ channels and _NO_ channel pvt's are locked.  If a channel is locked while calling
 *       this function, it invalidates our channel container locking order.  All channels
 *       must be unlocked before it is permissible to lock the channels' ao2 container.
 */

now with ao2_callback_find locking and unlocking channels and channels this deadlock is possible AFAIK

the recent changes did not sort out this possible problem due to it been locked going in...


- irroot


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


On 2011-05-26 03:58:55, irroot wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1118/
> -----------------------------------------------------------
> 
> (Updated 2011-05-26 03:58:55)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Summary
> -------
> 
> as a companion to 0018825 to aid with the move from call-limits to channel group variables. the problem with pickup and queue is that they manage channels outside the dialplan and need "helpers" to deal with channel groups.
> 
> in the case of pickup when a call is placed to a extension with say a "<EXTEN>@called" channel group when it is picked up this needs to be cleared to allow further calls when call waiting is disabled.
> 
> exten => s,n,GotoIf($[$[${ GROUP_COUNT(${ARG1}@called)} >= 1] | $[${GROUP_COUNT(${ARG1}@caller)} >= 1] | $[${GROUP_COUNT(${ARG1}@pickup)} >= 1] | $[${GROUP_COUNT(${ARG1}@qagent)} >= 1]]?s-BUSY,1)
> 
> where
> caller is set when a call is placed.
> called is set when a call is received
> pickup is set when before calling pickup in the dialplan
> qagent is set with patch to queue
> 
> Hope this is found to be useful and finds a home in trunk. 
> 
> not sure what time to put in the "wait for bridge" perhaps there is a better method ?? 
> 
> 
> This addresses bug 18830.
>     https://issues.asterisk.org/view.php?id=18830
> 
> 
> Diffs
> -----
> 
>   /trunk/apps/app_directed_pickup.c 320772 
>   /trunk/main/channel.c 320772 
> 
> Diff: https://reviewboard.asterisk.org/r/1118/diff
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> irroot
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20110526/2eee09b8/attachment-0001.htm>


More information about the asterisk-dev mailing list