add new function to check when messages need parsing to improve performance on parsing messages during originate

This commit is contained in:
Anthony Minessale 2010-11-30 09:49:12 -06:00
parent 7630d47e0e
commit 8b0421ff68
3 changed files with 26 additions and 4 deletions

View 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

View 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) {

View 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);
}
}
}