From b197d851d8d276f905d7e7b4324b9d3dfffea51b Mon Sep 17 00:00:00 2001 From: StefanEng86 Date: Fri, 15 Sep 2017 09:59:59 +0200 Subject: app_queue: Only do announcement logic between ringing cycles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/apps/app_queue.c b/apps/app_queue.c index ff93b0282..80a013c79 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -4749,7 +4749,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; @@ -5272,16 +5272,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) { @@ -6688,7 +6678,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) { @@ -8111,14 +8101,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; } -- cgit v1.2.3