*/
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
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) {
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);
+ }
}
}