]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[core] fix possible looping recover
authorAnthony Minessale <anthm@signalwire.com>
Sun, 19 Apr 2020 04:03:41 +0000 (04:03 +0000)
committerAndrey Volk <andywolk@gmail.com>
Sat, 23 Oct 2021 19:00:29 +0000 (22:00 +0300)
src/switch_channel.c
src/switch_core_state_machine.c

index 5a901ec199c19f2904ba7da2cb313b8c84dfb4ea..baca416c9e40f9fea72a4ab5a3e1fa62e5e137a7 100644 (file)
@@ -2190,7 +2190,7 @@ SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch
                switch_core_session_wake_video_thread(channel->session);
        }
 
-       if (flag == CF_RECOVERING && !channel->hangup_cause) {
+       if (flag == CF_RECOVERING && !channel->hangup_cause && !switch_channel_test_flag(channel, CF_NO_RECOVER)) {
                switch_core_recovery_track(channel->session);
        }
 
@@ -3931,9 +3931,11 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_answered(switch_chan
        switch_channel_presence(channel, "unknown", "answered", NULL);
 
        //switch_channel_audio_sync(channel);
-
-       switch_core_recovery_track(channel->session);
-
+                       
+       if (!switch_channel_test_flag(channel, CF_NO_RECOVER)) { 
+               switch_core_recovery_track(channel->session);
+       }
+       
        switch_channel_set_callstate(channel, CCS_ACTIVE);
 
        send_ind(channel, SWITCH_MESSAGE_ANSWER_EVENT, file, func, line);
index 57ba3bfeb22587e0aa69f250715735ba4af9e8a8..7a8e2e5ab7d473616c021eea7148a5cd1bd5f6e9 100644 (file)
@@ -55,7 +55,6 @@ static void switch_core_standard_on_init(switch_core_session_t *session)
 static void switch_core_standard_on_hangup(switch_core_session_t *session)
 {
        switch_caller_extension_t *extension;
-       int rec;
 
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Standard HANGUP, cause: %s\n",
                                          switch_channel_get_name(session->channel), switch_channel_cause2str(switch_channel_get_cause(session->channel)));
@@ -131,13 +130,8 @@ static void switch_core_standard_on_hangup(switch_core_session_t *session)
                }
        }
 
-       rec = switch_channel_test_flag(session->channel, CF_RECOVERING);
        switch_channel_clear_flag(session->channel, CF_RECOVERING);
-
-       if (!rec) {
-               switch_core_recovery_untrack(session, SWITCH_TRUE);
-       }
-
+       switch_core_recovery_untrack(session, SWITCH_TRUE);
 
        if (!switch_channel_test_flag(session->channel, CF_ZOMBIE_EXEC)) {
                return;