From 55eb2c5ccf6c54ee6a2bdf709c625497a01f09d8 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 15 Nov 2012 17:58:40 -0600 Subject: [PATCH] fix issue where max event threads would always launch as soon as you only needed one more --- src/switch_event.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/switch_event.c b/src/switch_event.c index 7a965d4dcd..259a5fa25c 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -37,7 +37,7 @@ #include "tpl.h" //#define SWITCH_EVENT_RECYCLE -#define DISPATCH_QUEUE_LEN 100 +#define DISPATCH_QUEUE_LEN 10000 //#define DEBUG_DISPATCH_QUEUES /*! \brief A node to store binded events */ @@ -291,6 +291,8 @@ static void *SWITCH_THREAD_FUNC switch_event_dispatch_thread(switch_thread_t *th } +static int PENDING = 0; + static switch_status_t switch_event_queue_dispatch_event(switch_event_t **eventp) { @@ -302,11 +304,14 @@ static switch_status_t switch_event_queue_dispatch_event(switch_event_t **eventp while (event) { int launch = 0; - + switch_mutex_lock(EVENT_QUEUE_MUTEX); - if (switch_queue_size(EVENT_DISPATCH_QUEUE) > (unsigned int)(DISPATCH_QUEUE_LEN * DISPATCH_THREAD_COUNT)) { - launch++; + if (!PENDING && switch_queue_size(EVENT_DISPATCH_QUEUE) > (unsigned int)(DISPATCH_QUEUE_LEN * DISPATCH_THREAD_COUNT)) { + if (SOFT_MAX_DISPATCH + 1 > MAX_DISPATCH) { + launch++; + PENDING++; + } } switch_mutex_unlock(EVENT_QUEUE_MUTEX); @@ -315,6 +320,10 @@ static switch_status_t switch_event_queue_dispatch_event(switch_event_t **eventp if (SOFT_MAX_DISPATCH + 1 < MAX_DISPATCH) { switch_event_launch_dispatch_threads(SOFT_MAX_DISPATCH + 1); } + + switch_mutex_lock(EVENT_QUEUE_MUTEX); + PENDING--; + switch_mutex_unlock(EVENT_QUEUE_MUTEX); } *eventp = NULL;