]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-4160
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 8 May 2012 16:51:46 +0000 (11:51 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 8 May 2012 16:51:52 +0000 (11:51 -0500)
src/switch_ivr_bridge.c

index b2cd384098949dbae1501ca36049edfc317952c3..6a2cee0405df2ec7fb58949eb7ccc645fae4fb48 100644 (file)
@@ -1491,21 +1491,26 @@ static void cleanup_proxy_mode_b(switch_core_session_t *session)
 static void cleanup_proxy_mode_a(switch_core_session_t *session)
 {
        switch_core_session_t *sbsession;
-
        switch_channel_t *channel = switch_core_session_get_channel(session);
-
+       int done = 0;
 
        if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
-               const char *sbv = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE);
-               if (!zstr(sbv) && (sbsession = switch_core_session_locate(sbv))) {
+               if (switch_core_session_get_partner(session, &sbsession) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_t *sbchannel = switch_core_session_get_channel(sbsession);
-                       /* Clear this now, otherwise will cause the one we're interested in to hang up too...*/
-                       switch_channel_set_variable(sbchannel, SWITCH_SIGNAL_BRIDGE_VARIABLE, NULL);
-                       switch_channel_hangup(sbchannel, SWITCH_CAUSE_ATTENDED_TRANSFER);
+
+                       if (switch_channel_test_flag(sbchannel, CF_PROXY_MODE)) {       
+                               /* Clear this now, otherwise will cause the one we're interested in to hang up too...*/
+                               switch_channel_set_variable(sbchannel, SWITCH_SIGNAL_BRIDGE_VARIABLE, NULL);
+                               switch_channel_hangup(sbchannel, SWITCH_CAUSE_ATTENDED_TRANSFER);
+                       } else {
+                               done = 1;
+                       }
                        switch_core_session_rwunlock(sbsession);
                }
        }
 
+       if (done) return;
+       
        switch_channel_set_variable(channel, SWITCH_SIGNAL_BRIDGE_VARIABLE, NULL);
        switch_channel_set_variable(channel, SWITCH_BRIDGE_VARIABLE, NULL);
        switch_channel_set_variable(channel, SWITCH_BRIDGE_UUID_VARIABLE, NULL);