From efff71f2f066ad1af45f3eaf0d853871575144a2 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 11 Jun 2019 19:22:43 +0000 Subject: [PATCH] [core] add switch_thread_pool_wait --- src/include/switch_core.h | 4 +++- src/switch_core_session.c | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index a0c91ec6fd..263c1f7ff7 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -67,6 +67,7 @@ typedef struct switch_thread_data_s { switch_thread_start_t func; void *obj; int alloc; + int running; switch_memory_pool_t *pool; } switch_thread_data_t; @@ -851,7 +852,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_thread_launch(_In_ switch_co SWITCH_DECLARE(switch_status_t) switch_thread_pool_launch_thread(switch_thread_data_t **tdp); SWITCH_DECLARE(switch_status_t) switch_core_session_thread_pool_launch(switch_core_session_t *session); - +SWITCH_DECLARE(switch_status_t) switch_thread_pool_wait(switch_thread_data_t *td, int ms); + /*! \brief Retrieve a pointer to the channel object associated with a given session \param session the session to retrieve from diff --git a/src/switch_core_session.c b/src/switch_core_session.c index 323adfc482..2258824159 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -1779,8 +1779,10 @@ static void *SWITCH_THREAD_FUNC switch_core_session_thread_pool_worker(switch_th #ifdef DEBUG_THREAD_POOL switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Worker Thread %ld Processing\n", (long) (intptr_t) thread); #endif + td->running = 1; td->func(thread, td->obj); - + td->running = 0; + if (td->pool) { switch_memory_pool_t *pool = td->pool; td = NULL; @@ -1896,6 +1898,15 @@ SWITCH_DECLARE(switch_status_t) switch_thread_pool_launch_thread(switch_thread_d return status; } +SWITCH_DECLARE(switch_status_t) switch_thread_pool_wait(switch_thread_data_t *td, int ms) +{ + while(!td->running && --ms > 0) { + switch_cond_next(); + } + + return ms > 0 ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_TIMEOUT; +} + SWITCH_DECLARE(switch_status_t) switch_core_session_thread_pool_launch(switch_core_session_t *session) { switch_status_t status = SWITCH_STATUS_INUSE; @@ -1920,7 +1931,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_thread_pool_launch(switch_co return status; } - SWITCH_DECLARE(switch_status_t) switch_core_session_thread_launch(switch_core_session_t *session) { switch_status_t status = SWITCH_STATUS_FALSE;