[asterisk-commits] file: trunk r48680 - /trunk/main/pbx.c
asterisk-commits at lists.digium.com
asterisk-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 asterisk-commits
mailing list