]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_meetme: Don't interrupt MOH for waitmarked users.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 22 May 2014 15:50:38 +0000 (15:50 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 22 May 2014 15:50:38 +0000 (15:50 +0000)
Occasionally, when the last marked user leaves the conference, waitmarked
users don't get MOH if MOH is supposed to be played while a waitmarked
user is waiting for another marked user.

* Made not interrupt MOH when the user is a waitmarked user.  The
waitmarked user doesn't need to hear any leave announcements from the
conference as the user would have already heard different leave
announcements if they were enabled.  Apparently DAHDI occasionally sends
unending non-silent streams to these users or a normal user still in the
conference has continuous high background noise.  These non-silent streams
cause MOH to be suspended while the never ending "announcement" is played.

Issue caused by ASTERISK-13680.

AST-1349 #close
Reported by: Tyler Stewart

Review: https://reviewboard.asterisk.org/r/3543/
........

Merged revisions 414401 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@414402 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 4d64308884f9b438f77ecf83d744d297ec2d4931..21aba6d3d43b765726efae44d2f9a51d4268c6f9 100644 (file)
@@ -4082,7 +4082,10 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
                                                ast_mutex_lock(&conf->listenlock);
                                                if (!conf->transframe[idx]) {
                                                        if (conf->origframe) {
-                                                               if (musiconhold && !ast_dsp_silence(dsp, conf->origframe, &confsilence) && confsilence < MEETME_DELAYDETECTTALK) {
+                                                               if (musiconhold
+                                                                       && !ast_test_flag64(confflags, CONFFLAG_WAITMARKED)
+                                                                       && !ast_dsp_silence(dsp, conf->origframe, &confsilence)
+                                                                       && confsilence < MEETME_DELAYDETECTTALK) {
                                                                        ast_moh_stop(chan);
                                                                        mohtempstopped = 1;
                                                                }
@@ -4126,7 +4129,10 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
                                                ast_mutex_unlock(&conf->listenlock);
                                        } else {
 bailoutandtrynormal:
-                                               if (musiconhold && !ast_dsp_silence(dsp, &fr, &confsilence) && confsilence < MEETME_DELAYDETECTTALK) {
+                                               if (musiconhold
+                                                       && !ast_test_flag64(confflags, CONFFLAG_WAITMARKED)
+                                                       && !ast_dsp_silence(dsp, &fr, &confsilence)
+                                                       && confsilence < MEETME_DELAYDETECTTALK) {
                                                        ast_moh_stop(chan);
                                                        mohtempstopped = 1;
                                                }