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:
{
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;
}
{
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);
}
/*
{
struct ast_switch *sw;
- AST_LIST_LOCK(&switches);
+ AST_RWLIST_RDLOCK(&switches);
- if (AST_LIST_EMPTY(&switches)) {
- AST_LIST_UNLOCK(&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;
}