]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6006 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 27 Nov 2013 18:40:35 +0000 (12:40 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 27 Nov 2013 18:40:35 +0000 (12:40 -0600)
src/switch_core_session.c
src/switch_ivr.c

index 0056e2d15570299b9fed7a02bfb241f1b7dc26c8..22964a3c72937a903dcb16080cfb58d174a0d4c3 100644 (file)
@@ -766,6 +766,15 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit
 
        switch_assert(session != NULL);
 
+       if (message->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+               if (session->endpoint_interface->io_routines->receive_message) {
+                       status = session->endpoint_interface->io_routines->receive_message(session, message);
+               }
+
+               switch_core_session_free_message(&message);
+               return status;
+       }
+
        if ((status = switch_core_session_read_lock_hangup(session)) != SWITCH_STATUS_SUCCESS) {
                return status;
        }
@@ -821,7 +830,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit
 
        }
 
-       if (switch_channel_down_nosig(session->channel) && message->message_id != SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+       if (switch_channel_down_nosig(session->channel)) {
                switch_log_printf(SWITCH_CHANNEL_ID_LOG, message->_file, message->_func, message->_line,
                                                  switch_core_session_get_uuid(session), SWITCH_LOG_DEBUG, "%s skip receive message [%s] (channel is hungup already)\n",
                                                  switch_channel_get_name(session->channel), message_names[message->message_id]);
@@ -830,7 +839,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit
                if (session->media_handle) {
                        status = switch_core_media_receive_message(session, message);
                }
-               if (status == SWITCH_STATUS_SUCCESS || message->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
+               if (status == SWITCH_STATUS_SUCCESS) {
                        if (session->endpoint_interface->io_routines->receive_message) {
                                status = session->endpoint_interface->io_routines->receive_message(session, message);
                        }
index 1f91ed96254ccbb0e585d914be1a856968c5f872..daba288c7e0f39ece36b9c2151dcff6d40a86234 100644 (file)
@@ -811,6 +811,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_signal_data(switch_core_ses
        int i = 0;
        switch_channel_t *channel = switch_core_session_get_channel(session);
 
+       if (!switch_core_session_in_thread(session)) {
+               return SWITCH_STATUS_FALSE;
+       }
 
        if (switch_channel_test_flag(channel, CF_SIGNAL_DATA)) {
                return SWITCH_STATUS_FALSE;