]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[core] add switch_thread_pool_wait
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 11 Jun 2019 19:22:43 +0000 (19:22 +0000)
committerAndrey Volk <andywolk@gmail.com>
Sat, 23 Oct 2021 18:59:59 +0000 (21:59 +0300)
src/include/switch_core.h
src/switch_core_session.c

index a0c91ec6fd55facf79917d157269b3431ae46e6e..263c1f7ff7ced6c5438ef7183aca6354d5edb4b0 100644 (file)
@@ -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
index 323adfc48268f601a975c27d4d47c963643720fe..2258824159a2c18a187f9438c46f550131a89a0c 100644 (file)
@@ -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;