diff --git a/main/app.c b/main/app.c index 2d1b897fb4..aecbffaf22 100644 --- a/main/app.c +++ b/main/app.c @@ -1010,10 +1010,15 @@ int ast_app_group_update(struct ast_channel *old, struct ast_channel *new) struct ast_group_info *gi = NULL; AST_RWLIST_WRLOCK(&groups); - AST_RWLIST_TRAVERSE(&groups, gi, list) { - if (gi->chan == old) + AST_RWLIST_TRAVERSE_SAFE_BEGIN(&groups, gi, list) { + if (gi->chan == old) { gi->chan = new; + } else if (gi->chan == new) { + AST_RWLIST_REMOVE_CURRENT(list); + ast_free(gi); + } } + AST_RWLIST_TRAVERSE_SAFE_END AST_RWLIST_UNLOCK(&groups); return 0;