From 91e3e209bf7478e5aa9e40cf648d24731ba7d4cf Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Mon, 18 Aug 2003 20:51:54 +0000
Subject: [PATCH] Pick the right point for rebuilding the list

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1367 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_queue.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/apps/app_queue.c b/apps/app_queue.c
index 41e787be57..e2f0295caa 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")) {
-- 
GitLab