aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 17:35:42 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 17:35:42 +0000
commit732a1e171143b18bad011b4337013fbe552dde59 (patch)
treec4f576d05a5f5b61eedeac6b624575936b401a1a /apps
parent5ef1263067b8ccebd7168d7ba69b0ba774dbebd6 (diff)
Merged revisions 43916 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r43916 | kpfleming | 2006-09-28 12:31:57 -0500 (Thu, 28 Sep 2006) | 2 lines fix buggy (and overly complex) loop used during reload of app_queue for static member list updating ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@43919 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_queue.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 74ee15b93..0a06301bf 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -3708,7 +3708,7 @@ static int reload_queues(void)
struct ast_config *cfg;
char *cat, *tmp;
struct ast_variable *var;
- struct member *prev, *cur, *newm;
+ struct member *prev, *cur, *newm, *next;
int new;
const char *general_val = NULL;
char parse[80];
@@ -3825,22 +3825,19 @@ static int reload_queues(void)
}
/* Free remaining members marked as delme */
- for (prev = NULL, newm = NULL, cur = q->members; cur; prev = cur, cur = cur->next) {
- if (newm) {
- free(newm);
- newm = NULL;
- }
+ for (prev = NULL, cur = q->members, next = cur ? cur->next : NULL;
+ cur;
+ cur = next, next = cur ? cur->next : NULL) {
+ if (!cur->delme)
+ continue;
+
+ if (prev)
+ prev->next = next;
+ else
+ q->members = next;
- if (cur->delme) {
- if (prev) {
- prev->next = cur->next;
- newm = cur;
- } else {
- q->members = cur->next;
- newm = cur;
- }
- remove_from_interfaces(cur->interface);
- }
+ remove_from_interfaces(cur->interface);
+ free(cur);
}
if (q->strategy == QUEUE_STRATEGY_ROUNDROBIN)