stasis: Hangup channel for Local channel No such extension error
When we use early bridge with create and dial from stasis using Local channel and the dialplan does not any entry the it is returned from core_local.c with No such extension . In such case asterisk locks up till the channel is not hangup with the error Exceptionally long voice queue length * Found that in such case app_control_dial fails on ast_call method and return -1 * Since it is called from stasis_app_send_command_async and return -1 does not cause resources to be freed and since no PBX exist it is not able to read from channel causing exceptionally long queue * After putting this code found that the channel was releasing immediately and resources were freed. ASTERISK-28399 Reported by: Abhay Gupta Tested by: Abhay Gupta Change-Id: I0a55c923fc6995559f808d63b9488762b4489318
This commit is contained in:
parent
8357ab7e9a
commit
9a0fa51443
|
@ -1649,6 +1649,17 @@ static int app_control_dial(struct stasis_app_control *control,
|
|||
}
|
||||
|
||||
if (ast_call(chan, args->dialstring, 0)) {
|
||||
/* If call fails normally this channel would then just be normally hung up and destroyed.
|
||||
* In this case though the channel is being handled by the ARI control thread and dial
|
||||
* bridge which needs to be notified that the channel should be hung up. To do this we
|
||||
* queue a soft hangup which will cause each to wake up, see that the channel has been
|
||||
* hung up, and then destroy it.
|
||||
*/
|
||||
int hangup_flag;
|
||||
hangup_flag = ast_bridge_setup_after_goto(chan) ? AST_SOFTHANGUP_DEV : AST_SOFTHANGUP_ASYNCGOTO;
|
||||
ast_channel_lock(chan);
|
||||
ast_softhangup_nolock(chan, hangup_flag);
|
||||
ast_channel_unlock(chan);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue