From 74cd80b1a42d027ca50ce9a9766f0a06caab8213 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" <kpfleming@digium.com> Date: Thu, 11 May 2006 10:37:39 +0000 Subject: [PATCH] use the proper method to get out of the bridge loop git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26851 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channel.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/channel.c b/channel.c index 750f1ffe97..5a28296548 100644 --- a/channel.c +++ b/channel.c @@ -3276,7 +3276,7 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct /* Copy voice back and forth between the two channels. */ struct ast_channel *cs[3]; struct ast_frame *f; - enum ast_bridge_result res = 0; + enum ast_bridge_result res = AST_BRIDGE_COMPLETE; int o0nativeformats; int o1nativeformats; int watch_c0_dtmf; @@ -3328,7 +3328,6 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct if (!f) { *fo = NULL; *rc = who; - res = AST_BRIDGE_COMPLETE; ast_log(LOG_DEBUG, "Didn't get a frame from channel: %s\n",who->name); break; } @@ -3336,6 +3335,8 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct other = (who == c0) ? c1 : c0; /* the 'other' channel */ if ((f->frametype == AST_FRAME_CONTROL) && !(config->flags & AST_BRIDGE_IGNORE_SIGS)) { + int bridge_exit = 0; + switch (f->subclass) { case AST_CONTROL_HOLD: case AST_CONTROL_UNHOLD: @@ -3345,11 +3346,11 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct default: *fo = f; *rc = who; - res = AST_BRIDGE_COMPLETE; + bridge_exit = 1; ast_log(LOG_DEBUG, "Got a FRAME_CONTROL (%d) frame on channel %s\n", f->subclass, who->name); break; } - if (res == AST_BRIDGE_COMPLETE) + if (bridge_exit) break; } if ((f->frametype == AST_FRAME_VOICE) || @@ -3365,7 +3366,6 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct if (f->frametype == AST_FRAME_DTMF && monitored_source) { *fo = f; *rc = who; - res = AST_BRIDGE_COMPLETE; ast_log(LOG_DEBUG, "Got DTMF on channel (%s)\n", who->name); break; } -- GitLab