]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix reversed behavior of leavewhenempty option in queues.conf.
authorMark Michelson <mmichelson@digium.com>
Thu, 23 Apr 2009 17:45:35 +0000 (17:45 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 23 Apr 2009 17:45:35 +0000 (17:45 +0000)
(closes issue #14650)
Reported by: alecdavis
Patches:
      14650.patch uploaded by mmichelson (license 60)
Tested by: mmichelson, lmadsen

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

apps/app_queue.c

index c88bfd61db78c6e2ef364f9bc995e185f7e07faf..ad5918d6e09e0ef9e0bb52b32ad341a8ee48c324 100644 (file)
@@ -1310,7 +1310,7 @@ static int insert_penaltychange (const char *list_name, const char *content, con
        return 0;
 }
 
-static void parse_empty_options(const char *value, enum empty_conditions *empty)
+static void parse_empty_options(const char *value, enum empty_conditions *empty, int joinempty)
 {
        char *value_copy = ast_strdupa(value);
        char *option = NULL;
@@ -1335,10 +1335,12 @@ static void parse_empty_options(const char *value, enum empty_conditions *empty)
                        *empty = (QUEUE_EMPTY_PENALTY | QUEUE_EMPTY_INVALID);
                } else if (!strcasecmp(option, "strict")) {
                        *empty = (QUEUE_EMPTY_PENALTY | QUEUE_EMPTY_INVALID | QUEUE_EMPTY_PAUSED | QUEUE_EMPTY_UNAVAILABLE);
-               } else if (ast_false(option)) {
+               } else if ((ast_false(option) && joinempty) || (ast_true(option) && !joinempty)) {
                        *empty = (QUEUE_EMPTY_PENALTY | QUEUE_EMPTY_INVALID | QUEUE_EMPTY_PAUSED);
-               } else if (ast_true(option)) {
+               } else if ((ast_false(option) && !joinempty) || (ast_true(option) && joinempty)) {
                        *empty = 0;
+               } else {
+                       ast_log(LOG_WARNING, "Unknown option %s for '%s'\n", option, joinempty ? "joinempty" : "leavewhenempty");
                }
        }
 }
@@ -1503,9 +1505,9 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
                }
                q->strategy = strategy;
        } else if (!strcasecmp(param, "joinempty")) {
-               parse_empty_options(val, &q->joinempty);
+               parse_empty_options(val, &q->joinempty, 1);
        } else if (!strcasecmp(param, "leavewhenempty")) {
-               parse_empty_options(val, &q->leavewhenempty);
+               parse_empty_options(val, &q->leavewhenempty, 0);
        } else if (!strcasecmp(param, "eventmemberstatus")) {
                q->maskmemberstatus = !ast_true(val);
        } else if (!strcasecmp(param, "eventwhencalled")) {