]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FSCORE-615
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 3 Jun 2010 15:16:47 +0000 (10:16 -0500)
committerBrian West <brian@freeswitch.org>
Thu, 3 Jun 2010 15:17:00 +0000 (10:17 -0500)
src/switch_ivr.c

index b466ef0feb8692602a31639be8d2dce4bfb4b396..3e143cf3d2edad958e1b1092a2f9f2f5bd30e84a 100644 (file)
@@ -1284,6 +1284,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_nomedia(const char *uuid, switch_medi
 
                                switch_channel_set_flag(other_channel, CF_RESET);
                                switch_channel_set_flag(other_channel, CF_REDIRECT);
+
+                               if (!switch_core_session_in_thread(session)) {
+                                       switch_channel_set_state(channel, CS_PARK);
+                               }
                                switch_channel_set_state(other_channel, CS_PARK);
                                if (switch_core_session_in_thread(session)) {
                                        switch_yield(100000);
@@ -1298,15 +1302,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_nomedia(const char *uuid, switch_medi
 
                        switch_core_session_receive_message(session, &msg);
 
-                       if (!switch_core_session_in_thread(session)) {
-                               switch_channel_set_state(channel, CS_PARK);
-                               switch_channel_wait_for_state(channel, channel, CS_PARK);
-                               switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
-                               switch_channel_wait_for_flag(channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
-                               switch_channel_wait_for_flag(channel, CF_MEDIA_SET, SWITCH_TRUE, 10000, NULL);
-                       }
-
                        if (other_channel) {
+                               if (!switch_core_session_in_thread(session)) {
+                                       switch_channel_wait_for_state(channel, channel, CS_PARK);
+                                       switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL);
+                                       switch_channel_wait_for_flag(channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL);
+                                       switch_channel_wait_for_flag(channel, CF_MEDIA_SET, SWITCH_TRUE, 10000, NULL);
+                               }
+
                                if (swap) {
                                        switch_ivr_signal_bridge(other_session, session);
                                } else {