diff options
author | Mark Spencer <markster@digium.com> | 2003-08-18 20:51:54 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2003-08-18 20:51:54 +0000 |
commit | 91e3e209bf7478e5aa9e40cf648d24731ba7d4cf (patch) | |
tree | b8c007f5e4420d705712c4b4a1d73cc228f8b2e8 | |
parent | 8d5c7dd566997d7e3e02456d3b290860f62082fb (diff) |
Pick the right point for rebuilding the list
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1367 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-x | apps/app_queue.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 41e787be5..e2f0295ca 100755 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -244,7 +244,7 @@ ast_log(LOG_NOTICE, "Queue '%s' Join, Channel '%s', Position '%d'\n", q->name, q return res; } -static void free_members(struct ast_call_queue *q) +static void free_members(struct ast_call_queue *q, int all) { /* Free non-dynamic members */ struct member *curm, *next, *prev; @@ -252,7 +252,7 @@ static void free_members(struct ast_call_queue *q) prev = NULL; while(curm) { next = curm->next; - if (!curm->dynamic) { + if (all || !curm->dynamic) { if (prev) prev->next = next; else @@ -281,7 +281,7 @@ static void destroy_queue(struct ast_call_queue *q) cur = cur->next; } ast_mutex_unlock(&qlock); - free_members(q); + free_members(q, 1); free(q); } @@ -1237,11 +1237,16 @@ static void reload_queues(void) q->retry = 0; q->timeout = -1; q->maxlen = 0; - free_members(q); + free_members(q, 0); strcpy(q->moh, ""); strcpy(q->announce, ""); strcpy(q->context, ""); - prev = NULL; + prev = q->members; + if (prev) { + /* find the end of any dynamic members */ + while(prev->next) + prev = prev->next; + } var = ast_variable_browse(cfg, cat); while(var) { if (!strcasecmp(var->name, "member")) { |