From 48ea6b5217ce2dec82c0abf1efe6d9b2f8ee4bf0 Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthm@freeswitch.org>
Date: Thu, 20 Jun 2013 21:15:32 -0500
Subject: [PATCH] FS-5530

---
 src/switch_ivr_bridge.c | 40 +++++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c
index 583fda4987..7e5991a396 100644
--- a/src/switch_ivr_bridge.c
+++ b/src/switch_ivr_bridge.c
@@ -1542,29 +1542,31 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
 			if (cause && !switch_channel_test_flag(peer_channel, CF_ANSWERED)) {
 				switch_channel_handle_cause(caller_channel, cause);
 			}
-			
-			if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
-				switch_ivr_park_session(session);
-			} else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {
-				transfer_after_bridge(session, var);
-			} else {
-				const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE);
-				int explicit = 0;
 
-				if (hup) {
-					explicit = !strcasecmp(hup, "explicit");
-				}
-
-				if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) {
-					switch_call_cause_t cause = switch_channel_get_cause(peer_channel);
-					if (cause == SWITCH_CAUSE_NONE) {
-						cause = SWITCH_CAUSE_NORMAL_CLEARING;
+			if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) {
+				if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
+					switch_ivr_park_session(session);
+				} else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {
+					transfer_after_bridge(session, var);
+				} else {
+					const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE);
+					int explicit = 0;
+					
+					if (hup) {
+						explicit = !strcasecmp(hup, "explicit");
 					}
 					
-					if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) {
-						switch_channel_set_flag(peer_channel, CF_INTERCEPT);
+					if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) {
+						switch_call_cause_t cause = switch_channel_get_cause(peer_channel);
+						if (cause == SWITCH_CAUSE_NONE) {
+							cause = SWITCH_CAUSE_NORMAL_CLEARING;
+						}
+						
+						if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) {
+							switch_channel_set_flag(peer_channel, CF_INTERCEPT);
+						}
+						switch_channel_hangup(caller_channel, cause);
 					}
-					switch_channel_hangup(caller_channel, cause);
 				}
 			}
 		}