mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-15 16:39:14 +00:00
add some more thread joins to avoid races
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12348 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
5f0c242265
commit
5d6fe797d1
@ -440,11 +440,17 @@ static void *SWITCH_THREAD_FUNC pool_thread(switch_thread_t *thread, void *obj)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static switch_thread_t *pool_thread_p = NULL;
|
||||||
|
|
||||||
void switch_core_memory_stop(void)
|
void switch_core_memory_stop(void)
|
||||||
{
|
{
|
||||||
|
switch_status_t st;
|
||||||
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Stopping memory pool queue.\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Stopping memory pool queue.\n");
|
||||||
#ifndef INSTANTLY_DESTROY_POOLS
|
#ifndef INSTANTLY_DESTROY_POOLS
|
||||||
memory_manager.pool_thread_running = -1;
|
memory_manager.pool_thread_running = -1;
|
||||||
|
switch_thread_join(&st, pool_thread_p);
|
||||||
|
|
||||||
while (memory_manager.pool_thread_running) {
|
while (memory_manager.pool_thread_running) {
|
||||||
switch_cond_next();
|
switch_cond_next();
|
||||||
}
|
}
|
||||||
@ -454,7 +460,6 @@ void switch_core_memory_stop(void)
|
|||||||
switch_memory_pool_t *switch_core_memory_init(void)
|
switch_memory_pool_t *switch_core_memory_init(void)
|
||||||
{
|
{
|
||||||
#ifndef INSTANTLY_DESTROY_POOLS
|
#ifndef INSTANTLY_DESTROY_POOLS
|
||||||
switch_thread_t *thread;
|
|
||||||
switch_threadattr_t *thd_attr;
|
switch_threadattr_t *thd_attr;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PER_POOL_LOCK
|
#ifdef PER_POOL_LOCK
|
||||||
@ -502,7 +507,7 @@ switch_memory_pool_t *switch_core_memory_init(void)
|
|||||||
switch_threadattr_detach_set(thd_attr, 1);
|
switch_threadattr_detach_set(thd_attr, 1);
|
||||||
|
|
||||||
switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
|
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) {
|
while (!memory_manager.pool_thread_running) {
|
||||||
switch_cond_next();
|
switch_cond_next();
|
||||||
|
@ -113,7 +113,7 @@ static void do_sleep(switch_interval_time_t t)
|
|||||||
|
|
||||||
SWITCH_DECLARE(switch_time_t) switch_micro_time_now(void)
|
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 @@ SWITCH_DECLARE(void) switch_cond_next(void)
|
|||||||
#ifdef DISABLE_1MS_COND
|
#ifdef DISABLE_1MS_COND
|
||||||
do_sleep(1000);
|
do_sleep(1000);
|
||||||
#else
|
#else
|
||||||
if (!runtime.timestamp || globals.use_cond_yield != 1) {
|
if (globals.RUNNING != 1 || !runtime.timestamp || globals.use_cond_yield != 1) {
|
||||||
do_sleep(1000);
|
do_sleep(1000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -210,7 +210,7 @@ SWITCH_DECLARE(void) switch_cond_yield(switch_interval_time_t t)
|
|||||||
switch_time_t want;
|
switch_time_t want;
|
||||||
if (!t) return;
|
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);
|
do_sleep(t);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user