[asterisk-commits] tilghman: branch 1.4 r53355 - in /branches/1.4:
./ apps/app_macro.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Wed Feb 7 08:33:51 MST 2007
Author: tilghman
Date: Wed Feb 7 09:33:51 2007
New Revision: 53355
URL: http://svn.digium.com/view/asterisk?view=rev&rev=53355
Log:
Merged revisions 53354 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r53354 | tilghman | 2007-02-07 09:30:02 -0600 (Wed, 07 Feb 2007) | 2 lines
Issue 7440 - Macro called from Macro from the h extension exits prematurely
........
Modified:
branches/1.4/ (props changed)
branches/1.4/apps/app_macro.c
Propchange: branches/1.4/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.
Modified: branches/1.4/apps/app_macro.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_macro.c?view=diff&rev=53355&r1=53354&r2=53355
==============================================================================
--- branches/1.4/apps/app_macro.c (original)
+++ branches/1.4/apps/app_macro.c Wed Feb 7 09:33:51 2007
@@ -115,9 +115,10 @@
int oldpriority;
char pc[80], depthc[12];
char oldcontext[AST_MAX_CONTEXT] = "";
+ const char *inhangupc;
int offset, depth = 0, maxdepth = 7;
int setmacrocontext=0;
- int autoloopflag, dead = 0;
+ int autoloopflag, dead = 0, inhangup = 0;
char *save_macro_exten;
char *save_macro_context;
@@ -141,6 +142,13 @@
s = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
if (s)
sscanf(s, "%d", &depth);
+ /* Used for detecting whether to return when a Macro is called from another Macro after hangup */
+ if (strcmp(chan->exten, "h") == 0)
+ pbx_builtin_setvar_helper(chan, "MACRO_IN_HANGUP", "1");
+ inhangupc = pbx_builtin_getvar_helper(chan, "MACRO_IN_HANGUP");
+ if (!ast_strlen_zero(inhangupc))
+ sscanf(inhangupc, "%d", &inhangup);
+
if (depth >= maxdepth) {
ast_log(LOG_ERROR, "Macro(): possible infinite loop detected. Returning early.\n");
ast_module_user_remove(u);
@@ -263,7 +271,7 @@
break;
}
/* don't stop executing extensions when we're in "h" */
- if (chan->_softhangup && strcasecmp(oldexten,"h") && strcasecmp(chan->macroexten,"h")) {
+ if (chan->_softhangup && !inhangup) {
ast_log(LOG_DEBUG, "Extension %s, macroexten %s, priority %d returned normally even though call was hung up\n",
chan->exten, chan->macroexten, chan->priority);
goto out;
More information about the asterisk-commits
mailing list