aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-10-09 23:15:33 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-10-09 23:15:33 +0000
commit4032641d385a51f63d26680bbbf61dfe75367f4c (patch)
treef8ac4c8afd6a2aabb0740bb728030cca518ad085
parent768c0284e382e5b3adbe9e1fd00cf2a890fbebb3 (diff)
Merged revisions 146026 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r146026 | murf | 2008-10-03 12:12:54 -0500 (Fri, 03 Oct 2008) | 18 lines (closes issue #13579) Reported by: dwagner (closes issue #13584) Reported by: dwagner Tested by: murf, putnopvut The thought occurred to me that the res= from the extension spawn was ending up being returned from the bridge. "Thou shalt not poison the return value". Made the change and it appears to allow blind xfers to work as normal. If I'm wrong, reopen the bugs. But it looks good to me! Many thanks to putnopvut for helping me reproduce this! ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@148112 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--main/features.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/main/features.c b/main/features.c
index 988444192..c5e6d9201 100644
--- a/main/features.c
+++ b/main/features.c
@@ -2387,6 +2387,7 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
char save_exten[AST_MAX_EXTENSION];
int save_prio;
int found = 0; /* set if we find at least one match */
+ int spawn_error = 0;
if (ast_opt_end_cdr_before_h_exten) {
ast_cdr_end(bridge_cdr);
@@ -2403,15 +2404,13 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
ast_copy_string(chan->exten, "h", sizeof(chan->exten));
chan->priority = 1;
ast_channel_unlock(chan);
- while ((res = ast_spawn_extension(chan, chan->context, chan->exten, chan->priority, chan->cid.cid_num, &found, 1)) == 0) {
+ while ((spawn_error = ast_spawn_extension(chan, chan->context, chan->exten, chan->priority, chan->cid.cid_num, &found, 1)) == 0) {
chan->priority++;
}
- if (found && res) {
+ 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);
ast_verb(2, "Spawn extension (%s, %s, %d) exited non-zero on '%s'\n", chan->context, chan->exten, chan->priority, chan->name);
- } else if (!found && res) {
- res = 0;
}
/* swap it back */
ast_channel_lock(chan);