From 3af25d503cdb17a6ff4d9f5817172dc6415baae1 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 29 Aug 2012 11:46:36 -0500 Subject: [PATCH] FS-4573 --resolve --- src/include/private/switch_core_pvt.h | 1 + src/switch_core.c | 2 +- src/switch_core_session.c | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h index 4483220ca3..56aaf48ff6 100644 --- a/src/include/private/switch_core_pvt.h +++ b/src/include/private/switch_core_pvt.h @@ -289,6 +289,7 @@ struct switch_session_manager { uint32_t session_limit; switch_size_t session_id; switch_queue_t *thread_queue; + switch_thread_t *manager_thread; switch_mutex_t *mutex; int ready; int running; diff --git a/src/switch_core.c b/src/switch_core.c index 2102a70236..3f1a6d5075 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -2461,7 +2461,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_destroy(void) switch_nat_shutdown(); } switch_xml_destroy(); - + switch_core_session_uninit(); switch_console_shutdown(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Closing Event Engine.\n"); diff --git a/src/switch_core_session.c b/src/switch_core_session.c index 1f499c1459..d017c767cf 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -2230,15 +2230,13 @@ void switch_core_session_init(switch_memory_pool_t *pool) switch_core_hash_init(&session_manager.session_table, session_manager.memory_pool); if (switch_test_flag((&runtime), SCF_SESSION_THREAD_POOL)) { - switch_thread_t *thread; switch_threadattr_t *thd_attr; switch_mutex_init(&session_manager.mutex, SWITCH_MUTEX_NESTED, session_manager.memory_pool); switch_queue_create(&session_manager.thread_queue, 100000, session_manager.memory_pool); switch_threadattr_create(&thd_attr, session_manager.memory_pool); - switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&thread, thd_attr, switch_core_session_thread_pool_manager, NULL, session_manager.memory_pool); + switch_thread_create(&session_manager.manager_thread, thd_attr, switch_core_session_thread_pool_manager, NULL, session_manager.memory_pool); session_manager.ready = 1; } @@ -2247,10 +2245,13 @@ void switch_core_session_init(switch_memory_pool_t *pool) void switch_core_session_uninit(void) { int sanity = 100; + switch_status_t st = SWITCH_STATUS_FALSE; switch_core_hash_destroy(&session_manager.session_table); session_manager.ready = 0; + switch_thread_join(&st, session_manager.manager_thread); + while(session_manager.running && --sanity > 0) { switch_queue_interrupt_all(session_manager.thread_queue); switch_yield(100000);