Merged revisions 74120 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Mon, 9 Jul 2007 18:37:09 +0000 (18:37 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 9 Jul 2007 18:37:09 +0000 (18:37 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r74120 | mmichelson | 2007-07-09 13:32:50 -0500 (Mon, 09 Jul 2007) | 6 lines

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: https://origsvn.digium.com/svn/asterisk/trunk@74121 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c

index ce38d2f..1efc353 100644 (file)
@@ -2477,8 +2477,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;
@@ -3650,6 +3649,17 @@ check_turns:
 
                                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);
@@ -3699,17 +3709,7 @@ check_turns:
                                                qe.digits, qe.pos, qe.opos, (long) time(NULL) - qe.start);
                                        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|%d|%ld", 
-                                               qe.pos, qe.opos, (long) time(NULL) - qe.start);
-                                       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.