]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6108 --resolve caused by switch_ivr_media while on hold
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 14 Jan 2014 17:59:49 +0000 (22:59 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 14 Jan 2014 17:59:49 +0000 (22:59 +0500)
src/switch_core_media.c

index c7fec519aceb8e2be007d4efa3ac81e815b5b582..7a47a4b533cb94c4d2028e213e33438c6db22b32 100644 (file)
@@ -3668,8 +3668,11 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
                                        msg = "hold-private";
                                }
                        }
-                       
-                       switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+
+                       if (a_engine->rtp_session) {
+                               switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+                       }
+
                        if (v_engine->rtp_session) {
                                switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
                        }
@@ -3679,7 +3682,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
                        switch_channel_presence(session->channel, "unknown", msg, NULL);
                        changed = 1;
 
-                       if (a_engine->max_missed_hold_packets) {
+                       if (a_engine->max_missed_hold_packets && a_engine->rtp_session) {
                                switch_rtp_set_max_missed_packets(a_engine->rtp_session, a_engine->max_missed_hold_packets);
                        }
 
@@ -3706,7 +3709,10 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
                        switch_channel_set_flag(session->channel, CF_PROTO_HOLD);
                        switch_channel_mark_hold(session->channel, SWITCH_TRUE);
 
-                       switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+                       if (a_engine->rtp_session) {
+                               switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+                       }
+
                        if (v_engine->rtp_session) {
                                switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
                        }
@@ -3721,7 +3727,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
 
                        switch_yield(250000);
 
-                       if (a_engine->max_missed_packets) {
+                       if (a_engine->max_missed_packets && a_engine->rtp_session) {
                                switch_rtp_reset_media_timer(a_engine->rtp_session);
                                switch_rtp_set_max_missed_packets(a_engine->rtp_session, a_engine->max_missed_packets);
                        }