[asterisk-commits] rmudgett: trunk r430567 - in /trunk: ./ apps/app_macro.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jan 13 12:17:53 CST 2015
Author: rmudgett
Date: Tue Jan 13 12:17:51 2015
New Revision: 430567
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=430567
Log:
app_macro: Don't restore the calling location on a channel redirect.
v11: If a channel redirect to a macro exten of a macro that is active
happens, the redirect location doesn't get executed. Instead the original
macro location is restored and gets reexecuted.
v13: An additional effect happens if a parked call times out to an
extension in the macro that parked the call then the macro is reexecuted
instead of the expected park return location.
* Made not restore the macro calling location on an
AST_SOFTHANGUP_ASYNCGOTO.
* Increased the locked channel range when setting up the macro execution
environment to cover things that should be done while the channel is
locked.
* Removed unnecessary NULL tests before calling ast_free() in
_macro_exec().
ASTERISK-23850 #close
Reported by: Andrew Nagy
Review: https://reviewboard.asterisk.org/r/4292/
........
Merged revisions 430564 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 430565 from http://svn.asterisk.org/svn/asterisk/branches/13
Modified:
trunk/ (props changed)
trunk/apps/app_macro.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-13-merged' - no diff available.
Modified: trunk/apps/app_macro.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_macro.c?view=diff&rev=430567&r1=430566&r2=430567
==============================================================================
--- trunk/apps/app_macro.c (original)
+++ trunk/apps/app_macro.c Tue Jan 13 12:17:51 2015
@@ -376,9 +376,10 @@
pbx_builtin_setvar_helper(chan, varname, cur);
argc++;
}
- ast_channel_unlock(chan);
autoloopflag = ast_test_flag(ast_channel_flags(chan), AST_FLAG_IN_AUTOLOOP);
ast_set_flag(ast_channel_flags(chan), AST_FLAG_IN_AUTOLOOP);
+ ast_channel_unlock(chan);
+
while (ast_exists_extension(chan, ast_channel_context(chan), ast_channel_exten(chan), ast_channel_priority(chan),
S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
struct ast_context *c;
@@ -503,7 +504,10 @@
/* don't stop executing extensions when we're in "h" */
if (ast_check_hangup(chan) && !inhangup) {
- ast_debug(1, "Extension %s, macroexten %s, priority %d returned normally even though call was hung up\n", ast_channel_exten(chan), ast_channel_macroexten(chan), ast_channel_priority(chan));
+ ast_debug(1, "Extension %s, macroexten %s, priority %d returned normally even though call was hung up\n",
+ ast_channel_exten(chan),
+ ast_channel_macroexten(chan),
+ ast_channel_priority(chan));
goto out;
}
ast_channel_priority_set(chan, ast_channel_priority(chan) + 1);
@@ -522,24 +526,17 @@
for (x = 1; x < argc; x++) {
/* Restore old arguments and delete ours */
snprintf(varname, sizeof(varname), "ARG%d", x);
- if (oldargs[x]) {
- pbx_builtin_setvar_helper(chan, varname, oldargs[x]);
- ast_free(oldargs[x]);
- } else {
- pbx_builtin_setvar_helper(chan, varname, NULL);
- }
+ pbx_builtin_setvar_helper(chan, varname, oldargs[x]);
+ ast_free(oldargs[x]);
}
/* Restore macro variables */
pbx_builtin_setvar_helper(chan, "MACRO_EXTEN", save_macro_exten);
pbx_builtin_setvar_helper(chan, "MACRO_CONTEXT", save_macro_context);
pbx_builtin_setvar_helper(chan, "MACRO_PRIORITY", save_macro_priority);
- if (save_macro_exten)
- ast_free(save_macro_exten);
- if (save_macro_context)
- ast_free(save_macro_context);
- if (save_macro_priority)
- ast_free(save_macro_priority);
+ ast_free(save_macro_exten);
+ ast_free(save_macro_context);
+ ast_free(save_macro_priority);
if (setmacrocontext) {
ast_channel_macrocontext_set(chan, "");
@@ -547,7 +544,8 @@
ast_channel_macropriority_set(chan, 0);
}
- if (!strcasecmp(ast_channel_context(chan), fullmacro)) {
+ if (!strcasecmp(ast_channel_context(chan), fullmacro)
+ && !(ast_channel_softhangup_internal_flag(chan) & AST_SOFTHANGUP_ASYNCGOTO)) {
const char *offsets;
/* If we're leaving the macro normally, restore original information */
@@ -568,8 +566,7 @@
}
pbx_builtin_setvar_helper(chan, "MACRO_OFFSET", save_macro_offset);
- if (save_macro_offset)
- ast_free(save_macro_offset);
+ ast_free(save_macro_offset);
/* Unlock the macro */
if (exclusive) {
More information about the asterisk-commits
mailing list