]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix hold issue reported by irate anonymous guy on irc
authorAnthony Minessale <anthony.minessale@gmail.com>
Sun, 31 Dec 2006 21:06:03 +0000 (21:06 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Sun, 31 Dec 2006 21:06:03 +0000 (21:06 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3879 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_ivr.c

index 2e154cba7c2f36bdafb17ab0a245303bf83f3449..fbc65ebaa361521c4c0ddeb5a26552dfe8cecc24 100644 (file)
@@ -1301,7 +1301,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                } else { /* time off the channel (if you must) */
                        switch_frame_t *read_frame;
                        switch_status_t status; 
-                       while (switch_channel_test_flag(channel, CF_HOLD)) {
+                       while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_HOLD)) {
                                switch_yield(10000);
                        }
                        status = switch_core_session_read_frame(session, &read_frame, -1, 0);
@@ -1604,7 +1604,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text_handle(switch_core_session
                                switch_frame_t *read_frame;
                                switch_status_t status = switch_core_session_read_frame(session, &read_frame, -1, 0);
 
-                               while (switch_channel_test_flag(channel, CF_HOLD)) {
+                               while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_HOLD)) {
                                        switch_yield(10000);
                                }
 
@@ -1661,7 +1661,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text_handle(switch_core_session
                        switch_frame_t *read_frame;
                        switch_status_t status = switch_core_session_read_frame(session, &read_frame, -1, 0);
 
-                       while (switch_channel_test_flag(channel, CF_HOLD)) {
+                       while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_HOLD)) {
                                switch_yield(10000);
                        }