diff --git a/apps/app_queue.c b/apps/app_queue.c index 79a83f376a..691902927d 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);