When using realtime queues, app_queue wasn't updating the strategy if it was changed...
authorTerry Wilson <twilson@digium.com>
Fri, 12 Dec 2008 23:48:26 +0000 (23:48 +0000)
committerTerry Wilson <twilson@digium.com>
Fri, 12 Dec 2008 23:48:26 +0000 (23:48 +0000)
(closes issue #14034)
Reported by: cristiandimache
Tested by: otherwiseguy, cristiandimache

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

apps/app_queue.c

index fe039f7..1863acd 100644 (file)
@@ -1469,8 +1469,26 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
        } else if (!strcasecmp(param, "servicelevel")) {
                q->servicelevel= atoi(val);
        } else if (!strcasecmp(param, "strategy")) {
-               /* We already have set this, no need to do it again */
-               return;
+               int strategy;
+
+               /* We are a static queue and already have set this, no need to do it again */
+               if (failunknown) {
+                       return;
+               }
+               strategy = strat2int(val);
+               if (strategy < 0) {
+                       ast_log(LOG_WARNING, "'%s' isn't a valid strategy for queue '%s', using ringall instead\n",
+                               val, q->name);
+                       q->strategy = QUEUE_STRATEGY_RINGALL;
+               }
+               if (strategy == q->strategy) {
+                       return;
+               }
+               if (strategy == QUEUE_STRATEGY_LINEAR) {
+                       ast_log(LOG_WARNING, "Changing to the linear strategy currently requires asterisk to be restarted.\n");
+                       return;
+               }
+               q->strategy = strategy;
        } else if (!strcasecmp(param, "joinempty")) {
                parse_empty_options(val, &q->joinempty);
        } else if (!strcasecmp(param, "leavewhenempty")) {