From 3474b1412a5ab971ec377861c59ff57f615064e4 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Thu, 20 Mar 2008 02:05:34 +0000 Subject: [PATCH] fix shutdown race destroying memory pools. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7943 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_core.c | 2 +- src/switch_core_memory.c | 5 +---- src/switch_time.c | 1 - 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/switch_core.c b/src/switch_core.c index 9ea0833658..8bf6f3813b 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1049,6 +1049,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_destroy(void) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "End existing sessions\n"); switch_core_session_hupall(SWITCH_CAUSE_SYSTEM_SHUTDOWN); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Clean up modules.\n"); + switch_core_memory_stop(); switch_loadable_module_shutdown(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Closing Event Engine.\n"); @@ -1061,7 +1062,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_destroy(void) switch_rtp_shutdown(); switch_xml_destroy(); - switch_core_memory_stop(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Finalizing Shutdown.\n"); switch_log_shutdown(); diff --git a/src/switch_core_memory.c b/src/switch_core_memory.c index d2486b1c03..e02c4202a5 100644 --- a/src/switch_core_memory.c +++ b/src/switch_core_memory.c @@ -312,16 +312,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_perform_new_memory_pool(switch_memor SWITCH_DECLARE(switch_status_t) switch_core_perform_destroy_memory_pool(switch_memory_pool_t **pool, const char *file, const char *func, int line) { - //char tmp[128] = ""; - - switch_assert(pool != NULL); #ifdef DEBUG_ALLOC2 switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_CONSOLE, "Free Pool\n"); #endif - if (switch_queue_push(memory_manager.pool_queue, *pool) != SWITCH_STATUS_SUCCESS) { + if ((memory_manager.pool_thread_running != 1) || (switch_queue_push(memory_manager.pool_queue, *pool) != SWITCH_STATUS_SUCCESS)) { apr_pool_destroy(*pool); } *pool = NULL; diff --git a/src/switch_time.c b/src/switch_time.c index 0e1160a44c..a40115a371 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -421,7 +421,6 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(softtimer_shutdown) switch_yield(10000); } } - switch_core_destroy_memory_pool(&module_pool); return SWITCH_STATUS_SUCCESS; }