]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add new function to check when messages need parsing to improve performance on parsin...
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 30 Nov 2010 15:49:12 +0000 (09:49 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 30 Nov 2010 15:49:12 +0000 (09:49 -0600)
src/include/switch_core.h
src/switch_core_session.c
src/switch_ivr_originate.c

index 3f636d00c424aebe28144550b9eaf2ad546aaa19..231b26f269317d090bca7889c81d150eb2c0412c 100644 (file)
@@ -1024,6 +1024,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_queue_event(_In_ switch_core
 */
 SWITCH_DECLARE(uint32_t) switch_core_session_event_count(_In_ switch_core_session_t *session);
 
+/*
+  Number of parsable messages waiting on the session. 
+ */
+SWITCH_DECLARE(uint32_t) switch_core_session_messages_waiting(switch_core_session_t *session);
+
 /*! 
   \brief DE-Queue an event on a given session
   \param session the session to de-queue the message on
index eca2f8daf2ae5f6e26b16e3cf93b573df014f749..aaa47cc696a465584cf6eeebd9eaadc13a320663 100644 (file)
@@ -861,6 +861,21 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_queue_event(switch_core_sess
        return status;
 }
 
+SWITCH_DECLARE(uint32_t) switch_core_session_messages_waiting(switch_core_session_t *session)
+{
+       int x = 0;
+
+       if (session->private_event_queue) {
+               x += switch_queue_size(session->private_event_queue);
+       }
+
+       if (session->message_queue) {
+               x += switch_queue_size(session->message_queue);
+       }
+
+       return x;
+}
+
 SWITCH_DECLARE(uint32_t) switch_core_session_event_count(switch_core_session_t *session)
 {
        if (session->event_queue) {
index f99ac69188da5a667eded6a7ee89c5f0c1f2f089..e61534798b60f63db9ff5a5f36ab1391cd8c37d7 100644 (file)
@@ -638,10 +638,12 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
                
                if (!switch_channel_test_flag(originate_status[i].peer_channel, CF_PARK) && 
                        !switch_channel_test_flag(originate_status[i].peer_channel, CF_CONSUME_ON_ORIGINATE)) {
-                       if (switch_channel_test_flag(originate_status[i].peer_channel, CF_THREAD_SLEEPING)) {
-                               switch_core_session_wake_session_thread(originate_status[i].peer_session);
-                       } else {
-                               switch_ivr_parse_all_events(originate_status[i].peer_session);
+                       if (switch_core_session_messages_waiting(originate_status[i].peer_session)) {
+                               if (switch_channel_test_flag(originate_status[i].peer_channel, CF_THREAD_SLEEPING)) {
+                                       switch_core_session_wake_session_thread(originate_status[i].peer_session);
+                               } else {
+                                       switch_ivr_parse_all_events(originate_status[i].peer_session);
+                               }
                        }
                }