[asterisk-commits] jpeeler: trunk r231095 - /trunk/main/features.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Nov 24 12:50:40 CST 2009


Author: jpeeler
Date: Tue Nov 24 12:50:36 2009
New Revision: 231095

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=231095
Log:
Fix erroneous hangup extension execution

ast_spawn_extension behaves differently from 1.4 in that hangups and extensions
that do not exist do not return an error, whereas in 1.6 it does. This is now 
taken into account so that the AST_FLAG_BRIDGE_HANGUP_RUN flag gets set
properly.

(closes issue #16106)
Reported by: ajohnson
Tested by: ajohnson

Modified:
    trunk/main/features.c

Modified: trunk/main/features.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/features.c?view=diff&rev=231095&r1=231094&r2=231095
==============================================================================
--- trunk/main/features.c (original)
+++ trunk/main/features.c Tue Nov 24 12:50:36 2009
@@ -3085,6 +3085,10 @@
 		while ((spawn_error = ast_spawn_extension(chan, chan->context, chan->exten, chan->priority, chan->cid.cid_num, &found, 1)) == 0) {
 			chan->priority++;
 		}
+		if (spawn_error && (!ast_exists_extension(chan, chan->context, chan->exten, chan->priority, chan->cid.cid_num) || ast_check_hangup(chan))) {
+			/* if the extension doesn't exist or a hangup occurred, this isn't really a spawn error */
+			spawn_error = 0;
+		}
 		if (found && spawn_error) {
 			/* Something bad happened, or a hangup has been requested. */
 			ast_debug(1, "Spawn extension (%s,%s,%d) exited non-zero on '%s'\n", chan->context, chan->exten, chan->priority, chan->name);
@@ -3101,7 +3105,7 @@
 				bridge_cdr = NULL;
 			}
 		}
-		if (chan->priority != 1 || !spawn_error) {
+		if (!spawn_error) {
 			ast_set_flag(chan, AST_FLAG_BRIDGE_HANGUP_RUN);
 		}
 		ast_channel_unlock(chan);




More information about the asterisk-commits mailing list