mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
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: https://origsvn.digium.com/svn/asterisk/trunk@231095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -3085,6 +3085,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);
|
||||
@@ -3101,7 +3105,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);
|
||||
|
Reference in New Issue
Block a user