]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6272 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 26 Feb 2014 22:24:25 +0000 (03:24 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 26 Feb 2014 22:26:22 +0000 (03:26 +0500)
Conflicts:
src/include/switch_types.h

src/include/switch_types.h
src/switch_channel.c
src/switch_ivr_bridge.c

index fbfecd7538532a8ecd4e0f8db3e4b961e6e1cbc1..e213800dd73d173a5b10188e13352d75838009a8 100644 (file)
@@ -1315,6 +1315,7 @@ typedef enum {
        CF_NOVIDEO,
        CF_VIDEO_ECHO,
        CF_SLA_INTERCEPT,
+       CF_HANGUP_HELD,
        /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
        /* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
        CF_FLAG_MAX
index 757eddec25803034cdb129aceba56084c33bb94d..bf6cc8ed0ecc629d2d54566c87767acb9d463ca4 100644 (file)
@@ -3132,6 +3132,7 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_hangup(switch_chan
 
        if (switch_channel_test_flag(channel, CF_LEG_HOLDING)) {
                switch_channel_mark_hold(channel, SWITCH_FALSE);
+               switch_channel_set_flag(channel, CF_HANGUP_HELD);
        }
 
        if (!ok) {
index 3590bac5e5ae7fc1936ff0e472c45d4b2cb94ba1..87ceeba3e5e9fa386d764e8c9954e69e299ffa8a 100644 (file)
@@ -632,12 +632,11 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
        switch_channel_set_variable(chan_a, SWITCH_BRIDGE_VARIABLE, NULL);
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session_a), SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a));
        switch_channel_clear_flag(chan_a, CF_BRIDGED);
-
-       if (switch_channel_test_flag(chan_a, CF_LEG_HOLDING)) {
-
+       
+       if (switch_channel_test_flag(chan_a, CF_LEG_HOLDING) || switch_channel_test_flag(chan_a, CF_HANGUP_HELD)) {
                if (switch_channel_ready(chan_b) && switch_channel_get_state(chan_b) != CS_PARK) {
                        const char *ext = switch_channel_get_variable(chan_a, "hold_hangup_xfer_exten");
-
+                       
                        switch_channel_stop_broadcast(chan_b);
 
                        if (zstr(ext)) {
@@ -650,7 +649,10 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
                                switch_channel_set_variable(chan_b, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE, ext);
                        }
                }
-               switch_channel_mark_hold(chan_a, SWITCH_FALSE);
+
+               if (switch_channel_test_flag(chan_a, CF_LEG_HOLDING)) {
+                       switch_channel_mark_hold(chan_a, SWITCH_FALSE);
+               }
        }
 
        if (switch_channel_test_flag(chan_a, CF_INTERCEPTED)) {