[asterisk-commits] tilghman: trunk r53356 - in /trunk: ./ apps/app_macro.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Feb 7 08:35:44 MST 2007


Author: tilghman
Date: Wed Feb  7 09:35:44 2007
New Revision: 53356

URL: http://svn.digium.com/view/asterisk?view=rev&rev=53356
Log:
Merged revisions 53355 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r53355 | tilghman | 2007-02-07 09:33:51 -0600 (Wed, 07 Feb 2007) | 10 lines

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:
    trunk/   (props changed)
    trunk/apps/app_macro.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/apps/app_macro.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_macro.c?view=diff&rev=53356&r1=53355&r2=53356
==============================================================================
--- trunk/apps/app_macro.c (original)
+++ trunk/apps/app_macro.c Wed Feb  7 09:35:44 2007
@@ -117,9 +117,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;
@@ -143,6 +144,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);
@@ -267,7 +275,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) {
 			if (option_debug)
 				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);



More information about the asterisk-commits mailing list