aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-18 20:51:54 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-18 20:51:54 +0000
commit8fc75cdaafe95518c161275a29c63f2698320ffa (patch)
treeb8c007f5e4420d705712c4b4a1d73cc228f8b2e8
parent49984c37086b15e4dd867246910c857d09fb1659 (diff)
Pick the right point for rebuilding the list
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1367 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xapps/app_queue.c15
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")) {