aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-07-09 18:32:50 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-07-09 18:32:50 +0000
commit8749f49fe280418570b59d2fdb1d5d77568a4b0f (patch)
tree28dc26ffc12e4e91b3c0975eda1c292a6aed541c
parentb2057262593413cebcca79b8672cbad95637f3b7 (diff)
The n option for Queue should make the queue exit immediately after failure to reach any members and should not
be dependent on the timeout value passed to Queue (closes issue #10127, reported by bcnit, repaired by me) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@74120 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_queue.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 650227985..f8104c74d 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -2357,8 +2357,7 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
ast_set_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT);
break;
case 'n':
- if ((now - qe->start >= qe->parent->timeout))
- *go_on = 1;
+ *go_on = 1;
break;
case 'i':
forwardsallowed = 0;
@@ -3465,9 +3464,21 @@ check_turns:
}
break;
}
+ ast_log(LOG_DEBUG, "Status update 3\n");
stat = get_member_status(qe.parent, qe.max_penalty);
+ /* exit after 'timeout' cycle if 'n' option enabled */
+ if (go_on) {
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Exiting on time-out cycle\n");
+ ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
+ record_abandoned(&qe);
+ reason = QUEUE_TIMEOUT;
+ res = 0;
+ break;
+ }
+
/* leave the queue if no agents, if enabled */
if (qe.parent->leavewhenempty && (stat == QUEUE_NO_MEMBERS)) {
record_abandoned(&qe);
@@ -3510,16 +3521,7 @@ check_turns:
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%s|%d", qe.digits, qe.pos);
break;
}
- /* exit after 'timeout' cycle if 'n' option enabled */
- if (go_on) {
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "Exiting on time-out cycle\n");
- ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
- record_abandoned(&qe);
- reason = QUEUE_TIMEOUT;
- res = 0;
- break;
- }
+
/* Since this is a priority queue and
* it is not sure that we are still at the head
* of the queue, go and check for our turn again.