[svn-commits] file: trunk r48680 - /trunk/main/pbx.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Dec 20 18:48:36 MST 2006


Author: file
Date: Wed Dec 20 19:48:35 2006
New Revision: 48680

URL: http://svn.digium.com/view/asterisk?view=rev&rev=48680
Log:
Convert alternate dialplan switch list to use read/write locks.

Modified:
    trunk/main/pbx.c

Modified: trunk/main/pbx.c
URL: http://svn.digium.com/view/asterisk/trunk/main/pbx.c?view=diff&rev=48680&r1=48679&r2=48680
==============================================================================
--- trunk/main/pbx.c (original)
+++ trunk/main/pbx.c Wed Dec 20 19:48:35 2006
@@ -465,7 +465,7 @@
 
 static AST_RWLIST_HEAD_STATIC(apps, ast_app);
 
-static AST_LIST_HEAD_STATIC(switches, ast_switch);
+static AST_RWLIST_HEAD_STATIC(switches, ast_switch);
 
 static int stateid = 1;
 /* WARNING:
@@ -536,12 +536,12 @@
 {
 	struct ast_switch *asw;
 
-	AST_LIST_LOCK(&switches);
-	AST_LIST_TRAVERSE(&switches, asw, list) {
+	AST_RWLIST_RDLOCK(&switches);
+	AST_RWLIST_TRAVERSE(&switches, asw, list) {
 		if (!strcasecmp(asw->name, sw))
 			break;
 	}
-	AST_LIST_UNLOCK(&switches);
+	AST_RWLIST_UNLOCK(&switches);
 
 	return asw;
 }
@@ -2865,25 +2865,25 @@
 {
 	struct ast_switch *tmp;
 
-	AST_LIST_LOCK(&switches);
-	AST_LIST_TRAVERSE(&switches, tmp, list) {
+	AST_RWLIST_WRLOCK(&switches);
+	AST_RWLIST_TRAVERSE(&switches, tmp, list) {
 		if (!strcasecmp(tmp->name, sw->name)) {
-			AST_LIST_UNLOCK(&switches);
+			AST_RWLIST_UNLOCK(&switches);
 			ast_log(LOG_WARNING, "Switch '%s' already found\n", sw->name);
 			return -1;
 		}
 	}
-	AST_LIST_INSERT_TAIL(&switches, sw, list);
-	AST_LIST_UNLOCK(&switches);
+	AST_RWLIST_INSERT_TAIL(&switches, sw, list);
+	AST_RWLIST_UNLOCK(&switches);
 
 	return 0;
 }
 
 void ast_unregister_switch(struct ast_switch *sw)
 {
-	AST_LIST_LOCK(&switches);
-	AST_LIST_REMOVE(&switches, sw, list);
-	AST_LIST_UNLOCK(&switches);
+	AST_RWLIST_WRLOCK(&switches);
+	AST_RWLIST_REMOVE(&switches, sw, list);
+	AST_RWLIST_UNLOCK(&switches);
 }
 
 /*
@@ -3065,19 +3065,19 @@
 {
 	struct ast_switch *sw;
 
-	AST_LIST_LOCK(&switches);
-
-	if (AST_LIST_EMPTY(&switches)) {
-		AST_LIST_UNLOCK(&switches);
+	AST_RWLIST_RDLOCK(&switches);
+
+	if (AST_RWLIST_EMPTY(&switches)) {
+		AST_RWLIST_UNLOCK(&switches);
 		ast_cli(fd, "There are no registered alternative switches\n");
 		return RESULT_SUCCESS;
 	}
 
 	ast_cli(fd, "\n    -= Registered Asterisk Alternative Switches =-\n");
-	AST_LIST_TRAVERSE(&switches, sw, list)
+	AST_RWLIST_TRAVERSE(&switches, sw, list)
 		ast_cli(fd, "%s: %s\n", sw->name, sw->description);
 
-	AST_LIST_UNLOCK(&switches);
+	AST_RWLIST_UNLOCK(&switches);
 
 	return RESULT_SUCCESS;
 }



More information about the svn-commits mailing list