diff options
author | Matthew Jordan <mjordan@digium.com> | 2014-11-17 03:08:11 +0000 |
---|---|---|
committer | Matthew Jordan <mjordan@digium.com> | 2014-11-17 03:08:11 +0000 |
commit | fc2279afea8656e624470b2f40e0e69f6a5f6130 (patch) | |
tree | 3ca0492d5cd36423572019f89ce585e262b7e6d1 | |
parent | 656601d8c4118c0adcf77560894a7a54f2b434d9 (diff) |
app_confbridge: Don't play leader leaving prompt if no one will hear it
Consider the following:
- A marked user in a conference
- One or more end_marked only users in the conference
When the marked users leaves, we will be in the conf_state_multi_marked state.
This currently will traverse the users, kicking out any who have the end_marked
flags. When they are kicked, a full ast_bridge_remove is immediately called on
the channels. At this time, we also unilaterally set the need_prompt flag.
When the need_prompt flag is set, we then playback a sound to the bridge
informing everyone that the leader has left; however, no one is left in the
bridge. This causes some odd behaviour for the end_marked users - they are
stuck waiting for the bridge to be unlocked. This results in them waiting for
5 or 6 seconds of dead air before hearing that they've been kicked.
Unfortunately, we do have to keep the bridge locked while we're playing back
the 'leader-has-left' prompt. If there are any wait_marked users in the
conference, this behaviour can't be easily changed - but we do make the case
of the end_marked users better with this patch.
Review: https://reviewboard.asterisk.org/r/4184/
ASTERISK-24522 #close
Reported by: Matt Jordan
........
Merged revisions 428077 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 428078 from http://svn.asterisk.org/svn/asterisk/branches/12
........
Merged revisions 428079 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428080 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | apps/confbridge/conf_state_multi_marked.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/apps/confbridge/conf_state_multi_marked.c b/apps/confbridge/conf_state_multi_marked.c index dc4af78a5..417bdb044 100644 --- a/apps/confbridge/conf_state_multi_marked.c +++ b/apps/confbridge/conf_state_multi_marked.c @@ -86,8 +86,6 @@ static void leave_marked(struct confbridge_user *user) conf_remove_user_marked(user->conference, user); if (user->conference->markedusers == 0) { - need_prompt = 1; - AST_LIST_TRAVERSE_SAFE_BEGIN(&user->conference->active_list, user_iter, list) { /* Kick ENDMARKED cbu_iters */ if (ast_test_flag(&user_iter->u_profile, USER_OPT_ENDMARKED) && !user_iter->kicked) { @@ -103,6 +101,8 @@ static void leave_marked(struct confbridge_user *user) ast_bridge_remove(user_iter->conference->bridge, user_iter->chan); } else if (ast_test_flag(&user_iter->u_profile, USER_OPT_WAITMARKED) && !ast_test_flag(&user_iter->u_profile, USER_OPT_MARKEDUSER)) { + need_prompt = 1; + AST_LIST_REMOVE_CURRENT(list); user_iter->conference->activeusers--; AST_LIST_INSERT_TAIL(&user_iter->conference->waiting_list, user_iter, list); |