aboutsummaryrefslogtreecommitdiffstats
path: root/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'app.c')
-rw-r--r--app.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/app.c b/app.c
index f99775248..33b318dd2 100644
--- a/app.c
+++ b/app.c
@@ -1047,12 +1047,16 @@ int ast_app_group_set_channel(struct ast_channel *chan, char *data)
len += strlen(category) + 1;
AST_LIST_LOCK(&groups);
- AST_LIST_TRAVERSE(&groups, gi, list) {
- if (gi->chan == chan && !strcasecmp(gi->group, group) && (ast_strlen_zero(category) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category))))
+ AST_LIST_TRAVERSE_SAFE_BEGIN(&groups, gi, list) {
+ if ((gi->chan == chan) && ((ast_strlen_zero(category) && ast_strlen_zero(gi->category)) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category)))) {
+ AST_LIST_REMOVE_CURRENT(&groups, list);
+ free(gi);
break;
+ }
}
+ AST_LIST_TRAVERSE_SAFE_END
- if (!gi && (gi = calloc(1, len))) {
+ if ((gi = calloc(1, len))) {
gi->chan = chan;
gi->group = (char *) gi + sizeof(*gi);
strcpy(gi->group, group);