[Freeswitch-svn] [commit] r12348 - freeswitch/trunk/src

FreeSWITCH SVN anthm at freeswitch.org
Mon Mar 2 07:45:00 PST 2009


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;
 	}



More information about the Freeswitch-svn mailing list