app_queue: Only do announcement logic between ringing cycles
authorStefanEng86 <stefanen@kth.se>
Fri, 15 Sep 2017 07:59:59 +0000 (09:59 +0200)
committerJoshua Colp <jcolp@digium.com>
Mon, 25 Sep 2017 12:02:37 +0000 (07:02 -0500)
This patch reverts the change by patch 2263 from old reviewboard.
Note that reverting that 2263-patch still preserves the behaviour that
the commit log of the 2263-patch claimed to add. The reason for this is:

The function wait_for_answer is only called from try_calling which
in turn is only called from the main for loop in queue_exec, and
earlier in that loop we already check the things that's removed by
this patch. There's no need to check those things twice each loop
iteration, and I think the proper place to check it is before each
ringing cycle. By checking it in wait_for_answer, you allow the issue
explained in the jira - that the head caller hears announcements while
the agents' sip phones are actively ringing.

Reported-by: Stefan Engström
Tested-by: Stefan Engström
ASTERISK-27216 #close

Change-Id: Ic4290dc75256f9743900c6762ee1bb915f672db0

apps/app_queue.c

index ef40a89..b6079af 100644 (file)
@@ -4831,7 +4831,7 @@ static void update_connected_line_from_peer(struct ast_channel *chan, struct ast
  *
  * \todo eventually all call forward logic should be intergerated into and replaced by ast_call_forward()
  */
-static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed, int ringing)
+static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed)
 {
        const char *queue = qe->parent->name;
        struct callattempt *o, *start = NULL, *prev = NULL;
@@ -5349,16 +5349,6 @@ skip_frame:;
                }
        }
 
-       /* Make a position announcement, if enabled */
-       if (qe->parent->announcefrequency && qe->parent->announce_to_first_user) {
-               say_position(qe, ringing);
-       }
-
-       /* Make a periodic announcement, if enabled */
-       if (qe->parent->periodicannouncefrequency && qe->parent->announce_to_first_user) {
-               say_periodic_announcement(qe, ringing);
-       }
-
        if (!*to) {
                for (o = start; o; o = o->call_next) {
                        if (o->chan) {
@@ -6788,7 +6778,7 @@ static int try_calling(struct queue_ent *qe, struct ast_flags opts, char **opt_a
        ring_one(qe, outgoing, &numbusies);
        lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies,
                ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT),
-               forwardsallowed, ringing);
+               forwardsallowed);
 
        ao2_lock(qe->parent);
        if (qe->parent->strategy == QUEUE_STRATEGY_RRMEMORY || qe->parent->strategy == QUEUE_STRATEGY_RRORDERED) {
@@ -8259,14 +8249,14 @@ check_turns:
 
                if (makeannouncement) {
                        /* Make a position announcement, if enabled */
-                       if (qe.parent->announcefrequency)
+                       if (qe.parent->announcefrequency && qe.parent->announce_to_first_user)
                                if ((res = say_position(&qe,ringing)))
                                        goto stop;
                }
                makeannouncement = 1;
 
                /* Make a periodic announcement, if enabled */
-               if (qe.parent->periodicannouncefrequency) {
+               if (qe.parent->periodicannouncefrequency && qe.parent->announce_to_first_user) {
                        if ((res = say_periodic_announcement(&qe,ringing))) {
                                goto stop;
                        }