Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 182121) +++ apps/app_queue.c (working copy) @@ -1303,7 +1303,7 @@ 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; @@ -1328,10 +1328,12 @@ *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"); } } } @@ -1496,9 +1498,9 @@ } 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")) {