[Freeswitch-svn] [commit] r12348 - freeswitch/trunk/src
Author: anthm Date: Mon Mar 2 09:45:00 2009 New Revision: 12348 Log: add some more thread joins to avoid races Modified: freeswitch/trunk/src/switch_core_memory.c freeswitch/trunk/src/switch_time.c Modified: freeswitch/trunk/src/switch_core_memory.c ============================================================================== --- freeswitch/trunk/src/switch_core_memory.c (original) +++ freeswitch/trunk/src/switch_core_memory.c Mon Mar 2 09:45:00 2009 @@ -440,11 +440,17 @@ return NULL; } +static switch_thread_t *pool_thread_p = NULL; + void switch_core_memory_stop(void) { + switch_status_t st; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Stopping memory pool queue.\n"); #ifndef INSTANTLY_DESTROY_POOLS memory_manager.pool_thread_running = -1; + switch_thread_join(&st, pool_thread_p); + while (memory_manager.pool_thread_running) { switch_cond_next(); } @@ -454,7 +460,6 @@ switch_memory_pool_t *switch_core_memory_init(void) { #ifndef INSTANTLY_DESTROY_POOLS - switch_thread_t *thread; switch_threadattr_t *thd_attr; #endif #ifdef PER_POOL_LOCK @@ -502,7 +507,7 @@ switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&thread, thd_attr, pool_thread, NULL, memory_manager.memory_pool); + switch_thread_create(&pool_thread_p, thd_attr, pool_thread, NULL, memory_manager.memory_pool); while (!memory_manager.pool_thread_running) { switch_cond_next(); Modified: freeswitch/trunk/src/switch_time.c ============================================================================== --- freeswitch/trunk/src/switch_time.c (original) +++ freeswitch/trunk/src/switch_time.c Mon Mar 2 09:45:00 2009 @@ -113,7 +113,7 @@ SWITCH_DECLARE(switch_time_t) switch_micro_time_now(void) { - return runtime.timestamp ? runtime.timestamp : switch_time_now(); + return (globals.RUNNING == 1 && runtime.timestamp) ? runtime.timestamp : switch_time_now(); } @@ -195,7 +195,7 @@ #ifdef DISABLE_1MS_COND do_sleep(1000); #else - if (!runtime.timestamp || globals.use_cond_yield != 1) { + if (globals.RUNNING != 1 || !runtime.timestamp || globals.use_cond_yield != 1) { do_sleep(1000); return; } @@ -210,7 +210,7 @@ switch_time_t want; if (!t) return; - if (!runtime.timestamp || globals.use_cond_yield != 1) { + if (globals.RUNNING != 1 || !runtime.timestamp || globals.use_cond_yield != 1) { do_sleep(t); return; }
participants (1)
-
FreeSWITCH SVN