aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-24 18:54:01 +0000
committerjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-24 18:54:01 +0000
commit893164553203163941d347c7de863d218a2b91d9 (patch)
tree3dd0013b7b1f5d84a87136d623dd01807b3208bd
parent5afbe9f79b19c9ee0d4bf900bc434dd4a272719e (diff)
Merged revisions 231095 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r231095 | jpeeler | 2009-11-24 12:50:36 -0600 (Tue, 24 Nov 2009) | 11 lines 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 ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@231097 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--main/features.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/main/features.c b/main/features.c
index a170514d4..4eaf87ccd 100644
--- a/main/features.c
+++ b/main/features.c
@@ -2769,6 +2769,10 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
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);
@@ -2785,7 +2789,7 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
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);