[asterisk-commits] rmudgett: trunk r369296 - /trunk/main/features.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Jun 22 19:33:43 CDT 2012
Author: rmudgett
Date: Fri Jun 22 19:33:41 2012
New Revision: 369296
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369296
Log:
Fix F and F(x) action logic in Bridge application.
Modified:
trunk/main/features.c
Modified: trunk/main/features.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/features.c?view=diff&rev=369296&r1=369295&r2=369296
==============================================================================
--- trunk/main/features.c (original)
+++ trunk/main/features.c Fri Jun 22 19:33:41 2012
@@ -8051,26 +8051,28 @@
/* If the other channel has not been hung up, return it to the PBX */
if (!ast_check_hangup(final_dest_chan)) {
if (ast_test_flag(&opts, OPT_CALLEE_GO_ON)) {
- char *caller_context = ast_strdupa(ast_channel_context(chan));
- char *caller_extension = ast_strdupa(ast_channel_exten(chan));
- int caller_priority = ast_channel_priority(chan);
+ char *caller_context;
+ char *caller_extension;
+ int caller_priority;
+ int goto_opt;
+
+ ast_channel_lock(chan);
+ caller_context = ast_strdupa(ast_channel_context(chan));
+ caller_extension = ast_strdupa(ast_channel_exten(chan));
+ caller_priority = ast_channel_priority(chan);
+ ast_channel_unlock(chan);
if (!ast_strlen_zero(opt_args[OPT_ARG_CALLEE_GO_ON])) {
ast_replace_subargument_delimiter(opt_args[OPT_ARG_CALLEE_GO_ON]);
/* Set current dialplan position to bridger dialplan position */
- ast_goto_if_exists(final_dest_chan, caller_context, caller_extension, caller_priority);
- /* Then perform the goto */
- if (ast_parseable_goto(final_dest_chan, opt_args[OPT_ARG_CALLEE_GO_ON]) == AST_PBX_SUCCESS) {
- ast_pbx_start(final_dest_chan);
- } else {
- ast_hangup(final_dest_chan);
- }
+ goto_opt = ast_goto_if_exists(final_dest_chan, caller_context, caller_extension, caller_priority)
+ /* Then perform the goto */
+ || ast_parseable_goto(final_dest_chan, opt_args[OPT_ARG_CALLEE_GO_ON]);
} else { /* F() */
- if (ast_goto_if_exists(final_dest_chan, caller_context, caller_extension, caller_priority + 1) == AST_PBX_GOTO_FAILED) {
- ast_hangup(final_dest_chan);
- } else {
- ast_pbx_start(final_dest_chan);
- }
+ goto_opt = ast_goto_if_exists(final_dest_chan, caller_context, caller_extension, caller_priority + 1);
+ }
+ if (goto_opt || ast_pbx_start(final_dest_chan)) {
+ ast_hangup(final_dest_chan);
}
} else if (!ast_test_flag(&opts, OPT_CALLEE_KILL)) {
ast_debug(1, "starting new PBX in %s,%s,%d for chan %s\n",
More information about the asterisk-commits
mailing list