From: Joshua Colp Date: Mon, 7 May 2007 21:45:01 +0000 (+0000) Subject: Merged revisions 63285 via svnmerge from X-Git-Tag: 1.4.5~217 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=99cdfb2542644f5c6559ca24e41dd8f34323137c;p=thirdparty%2Fasterisk.git Merged revisions 63285 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r63285 | file | 2007-05-07 17:39:52 -0400 (Mon, 07 May 2007) | 2 lines Properly handle what happens during a masquerade in relation to group counting. (issue #9657 reported by ramonpeek) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@63286 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/include/asterisk/app.h b/include/asterisk/app.h index 2106fe6b3a..1c6dca0e7a 100644 --- a/include/asterisk/app.h +++ b/include/asterisk/app.h @@ -225,6 +225,9 @@ int ast_app_group_match_get_count(const char *groupmatch, const char *category); /*! Discard all group counting for a channel */ int ast_app_group_discard(struct ast_channel *chan); +/*! Update all group counting for a channel to a new one */ +int ast_app_group_update(struct ast_channel *old, struct ast_channel *new); + /*! Lock the group count list */ int ast_app_group_list_lock(void); diff --git a/main/app.c b/main/app.c index ef25e1ba54..89fdb26d4b 100644 --- a/main/app.c +++ b/main/app.c @@ -872,6 +872,20 @@ int ast_app_group_match_get_count(const char *groupmatch, const char *category) return count; } +int ast_app_group_update(struct ast_channel *old, struct ast_channel *new) +{ + struct ast_group_info *gi = NULL; + + AST_LIST_LOCK(&groups); + AST_LIST_TRAVERSE(&groups, gi, list) { + if (gi->chan == old) + gi->chan = new; + } + AST_LIST_UNLOCK(&groups); + + return 0; +} + int ast_app_group_discard(struct ast_channel *chan) { struct ast_group_info *gi = NULL; diff --git a/main/channel.c b/main/channel.c index bf1c9fec84..5c5b4899cf 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3611,7 +3611,7 @@ int ast_do_masquerade(struct ast_channel *original) original->fds[x] = clone->fds[x]; } - ast_app_group_discard(original); + ast_app_group_update(clone, original); /* move any whisperer over */ ast_channel_whisper_stop(original);