aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-09-13 16:25:59 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-09-13 16:25:59 +0000
commit2477b79099e3c47319382688555f9633ca998bc1 (patch)
tree20d32c28a6b3aa32ea4b7df21833601c8279b206
parentd5a2d8fffdec3b76fa07fcb2de0bc19876bc8917 (diff)
Added logic to handle the unlikely case that someone has two queues with the same name.
Asterisk will log a warning message letting the user know that one was already defined with that name and is it skipping all further instances. This also will work for realtime queues but in order for that to happen, the user would have to trigger a perfectly timed reload as a realtime queue is being looked up, which is highly unlikely (but taken care of nonetheless). git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@82326 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_queue.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 79a83f376..691902927 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -361,6 +361,7 @@ struct call_queue {
unsigned int strategy:3;
unsigned int maskmemberstatus:1;
unsigned int realtime:1;
+ unsigned int found:1;
int announcefrequency; /*!< How often to announce their position */
int periodicannouncefrequency; /*!< How often to play periodic announcement */
int roundingseconds; /*!< How many seconds do we round to? */
@@ -720,6 +721,7 @@ static void init_queue(struct call_queue *q)
q->periodicannouncefrequency = 0;
q->members = ao2_container_alloc(37, member_hash_fn, member_cmp_fn);
q->membercount = 0;
+ q->found = 1;
ast_copy_string(q->sound_next, "queue-youarenext", sizeof(q->sound_next));
ast_copy_string(q->sound_thereare, "queue-thereare", sizeof(q->sound_thereare));
ast_copy_string(q->sound_calls, "queue-callswaiting", sizeof(q->sound_calls));
@@ -1072,6 +1074,7 @@ static struct call_queue *find_queue_by_name_rt(const char *queuename, struct as
ast_mutex_unlock(&q->lock);
return NULL;
} else {
+ ast_log(LOG_WARNING, "Static queue '%s' already exists. Not loading from realtime\n", q->name);
ast_mutex_unlock(&q->lock);
return q;
}
@@ -3862,8 +3865,10 @@ static int reload_queues(void)
use_weight=0;
/* Mark all non-realtime queues as dead for the moment */
AST_LIST_TRAVERSE(&queues, q, list) {
- if(!q->realtime)
+ if(!q->realtime) {
q->dead = 1;
+ q->found = 0;
+ }
}
/* Chug through config file */
@@ -3898,6 +3903,13 @@ static int reload_queues(void)
if (q) {
if (!new)
ast_mutex_lock(&q->lock);
+ /* Check if a queue with this name already exists */
+ if (q->found) {
+ ast_log(LOG_WARNING, "Queue '%s' already defined! Skipping!\n", cat);
+ if(!new)
+ ast_mutex_unlock(&q->lock);
+ continue;
+ }
/* Re-initialize the queue, and clear statistics */
init_queue(q);
clear_queue(q);