[asterisk-commits] dhubbard: branch dhubbard/named_processors r108675 - in /team/dhubbard/named_...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Mar 13 23:26:58 CDT 2008


Author: dhubbard
Date: Thu Mar 13 23:26:56 2008
New Revision: 108675

URL: http://svn.digium.com/view/asterisk?view=rev&rev=108675
Log:
use astobj2

Modified:
    team/dhubbard/named_processors/apps/app_queue.c
    team/dhubbard/named_processors/include/asterisk/taskprocessor.h
    team/dhubbard/named_processors/main/taskprocessor.c
    team/dhubbard/named_processors/res/res_testobserver.c

Modified: team/dhubbard/named_processors/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/dhubbard/named_processors/apps/app_queue.c?view=diff&rev=108675&r1=108674&r2=108675
==============================================================================
--- team/dhubbard/named_processors/apps/app_queue.c (original)
+++ team/dhubbard/named_processors/apps/app_queue.c Thu Mar 13 23:26:56 2008
@@ -6221,7 +6221,7 @@
 	clear_and_free_interfaces();
 
 	ao2_ref(queues, -1);
-
+	ao2_ref(tpsi, -1);
 	return res;
 }
 

Modified: team/dhubbard/named_processors/include/asterisk/taskprocessor.h
URL: http://svn.digium.com/view/asterisk/team/dhubbard/named_processors/include/asterisk/taskprocessor.h?view=diff&rev=108675&r1=108674&r2=108675
==============================================================================
--- team/dhubbard/named_processors/include/asterisk/taskprocessor.h (original)
+++ team/dhubbard/named_processors/include/asterisk/taskprocessor.h Thu Mar 13 23:26:56 2008
@@ -58,8 +58,6 @@
 
 int create_taskprocessor_singleton(const char* name, void* (*func)(void*));
 int start_taskprocessor_singleton(const char* name);
-int stop_taskprocessor_singleton(const char* name);
-int destroy_taskprocessor_singleton(struct taskprocessor_singleton_info* t);
 int size_of_taskprocessor_singleton_list(void);
 struct taskprocessor_singleton_info* get_taskprocessor_singleton(const char* name);
 int exists_taskprocessor_singleton(char *name);

Modified: team/dhubbard/named_processors/main/taskprocessor.c
URL: http://svn.digium.com/view/asterisk/team/dhubbard/named_processors/main/taskprocessor.c?view=diff&rev=108675&r1=108674&r2=108675
==============================================================================
--- team/dhubbard/named_processors/main/taskprocessor.c (original)
+++ team/dhubbard/named_processors/main/taskprocessor.c Thu Mar 13 23:26:56 2008
@@ -19,9 +19,10 @@
  * Maintain a container of taskprocessor threads that are uniquely named
  */
 #include <asterisk.h>
+#include <asterisk/astobj2.h>
+#include <asterisk/cli.h>
+#include <asterisk/task.h>
 #include <asterisk/taskprocessor.h>
-#include <asterisk/task.h>
-#include <asterisk/cli.h>
 #include <signal.h>
 #include <sys/time.h>
 
@@ -40,6 +41,7 @@
 static int _taskprocessor_singletons_list_size = 0;
 
 static int add_taskprocessor_singleton(struct taskprocessor_singleton_info* t);
+static void destroy_taskprocessor_singleton(void *tps);
 static int remove_taskprocessor_singleton(const char* name);
 static int taskprocessor_ping(struct a_task* e);
 
@@ -239,28 +241,28 @@
 }
 
 
-static struct taskprocessor_singleton_info* default_taskprocessor_constructor(int poll_freq)
-{
-	struct taskprocessor_singleton_info* t;
-	t = ast_calloc(1, sizeof(*t));
-	if (!t) {
+static struct taskprocessor_singleton_info* construct_default_taskprocessor(int poll_freq)
+{
+	struct taskprocessor_singleton_info* tps;
+	tps = ao2_alloc(sizeof(*tps), destroy_taskprocessor_singleton);
+	if (!tps) {
 		ast_log(LOG_ERROR, "cannot allocate memory for a taskprocessor_singleton_info structure.\n");
 		return NULL;
 	}
-	t->_id = (unsigned long)t;
+	tps->_id = (unsigned long)tps;
 	if (poll_freq < 1)
-		t->_poll_freq = DEFAULT_POLL_FREQUENCY;
+		tps->_poll_freq = DEFAULT_POLL_FREQUENCY;
 	else
-		t->_poll_freq = poll_freq;
-	ast_cond_init(&t->_poll_cond, NULL);
-	t->_poll_thread = AST_PTHREADT_NULL;
-	t->_stats = ast_calloc(1, sizeof(*t->_stats));
-	if (!t->_stats) {
+		tps->_poll_freq = poll_freq;
+	ast_cond_init(&tps->_poll_cond, NULL);
+	tps->_poll_thread = AST_PTHREADT_NULL;
+	tps->_stats = ast_calloc(1, sizeof(*tps->_stats));
+	if (!tps->_stats) {
 		ast_log(LOG_ERROR, "cannot allocate memory for a taskprocessor_singleton_stats structure.\n");
-		ast_free(t);
-		return NULL;
-	}
-	return t;
+		ast_free(tps);
+		return NULL;
+	}
+	return tps;
 }
 	
 int create_taskprocessor_singleton(const char* name, void* (*func)(void*))
@@ -275,7 +277,7 @@
 	}
 	ast_mutex_unlock(&_global_clireg_lock);
 
-	p = default_taskprocessor_constructor(1);
+	p = construct_default_taskprocessor(1);
 	if (!p) {
 		ast_log(LOG_ERROR, "we can't create a taskprocessor_singleton because the default constructor failed.\n");
 		return -1;
@@ -322,36 +324,20 @@
 	return -1;
 }
 
-int stop_taskprocessor_singleton(const char* name)
-{
-	struct taskprocessor_singleton_info* p;
-	p = get_taskprocessor_singleton(name);
-	if (!p) {
-		ast_log(LOG_ERROR, "no taskprocessor named \'%s\' to stop.\n", name);
-		return -1;
-	}
-	p->_poll_thread_run = 0;
-
-	ast_mutex_lock(&p->_taskprocessor_lock);
-	ast_cond_signal(&p->_poll_cond);
-	ast_mutex_unlock(&p->_taskprocessor_lock);
-
-	pthread_join(p->_poll_thread, NULL);
-	p->_poll_thread = AST_PTHREADT_NULL;
-	ast_log(LOG_DEBUG, "taskprocessor \'%s\' stopped.\n", name);
-	return destroy_taskprocessor_singleton(p);
-}
-	
-int destroy_taskprocessor_singleton(struct taskprocessor_singleton_info* t)
-{
+static void destroy_taskprocessor_singleton(void *tps)
+{
+	struct taskprocessor_singleton_info *t = (struct taskprocessor_singleton_info *)tps;
 	if (!t) {
 		ast_log(LOG_ERROR, "can't destruct a NULL taskprocessor_singleton.\n");
-		return -1;
-	}
-	if (t->_poll_thread_run) {
-		ast_log(LOG_ERROR, "stop the taskprocessor before trying to destruct it.\n");
-		return -1;
-	}
+		return;
+	}
+	t->_poll_thread_run = 0;
+	ast_mutex_lock(&t->_taskprocessor_lock);
+	ast_cond_signal(&t->_poll_cond);
+	ast_mutex_unlock(&t->_taskprocessor_lock);
+	pthread_join(t->_poll_thread, NULL);
+	t->_poll_thread = AST_PTHREADT_NULL;
+
 	if (remove_taskprocessor_singleton(t->_name) < 0) {
 		ast_log(LOG_WARNING, "cannot remove taskprocessor_singleton \'%s\'.\n", t->_name);
 	}
@@ -359,9 +345,7 @@
 		ast_free(t->_stats);
 		t->_stats = NULL;
 	}
-	ast_free(t);
-	t = NULL;
-	return 0;
+	return;
 }
 
 int exists_taskprocessor_singleton(char *name)

Modified: team/dhubbard/named_processors/res/res_testobserver.c
URL: http://svn.digium.com/view/asterisk/team/dhubbard/named_processors/res/res_testobserver.c?view=diff&rev=108675&r1=108674&r2=108675
==============================================================================
--- team/dhubbard/named_processors/res/res_testobserver.c (original)
+++ team/dhubbard/named_processors/res/res_testobserver.c Thu Mar 13 23:26:56 2008
@@ -230,10 +230,7 @@
 	for (count=0; count < MAX_TEST_PROCESSORS; count++) {
 		snprintf(tbuf, sizeof(tbuf), "sillyprocessor-%d", count);
 		if (exists_taskprocessor_singleton(tbuf)) {
-			if (stop_taskprocessor_singleton(tbuf) < 0) {
-				ast_log(LOG_ERROR, "can't stop \'%s\' taskprocessor singleton\n", tbuf);
-				return -1;
-			}	
+			ao2_ref(get_taskprocessor_singleton(tbuf), -1);
 		}	
 	}
 	ast_log(LOG_NOTICE, "-- testobserver -- unload complete.\n");




More information about the asterisk-commits mailing list