Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 37084) +++ apps/app_queue.c (working copy) @@ -2660,7 +2660,7 @@ /* Dump all members in a specific queue to the database * - * / = ;;[|...] + * / = ;;;[|...] * */ static void dump_queue_members(struct call_queue *pm_queue) @@ -2676,11 +2676,11 @@ return; for (cur_member = pm_queue->members; cur_member; cur_member = cur_member->next) { - if (!cur_member->dynamic) + if (!cur_member->dynamic && !cur_member->paused) continue; - res = snprintf(value + value_len, sizeof(value) - value_len, "%s;%d;%d%s", - cur_member->interface, cur_member->penalty, cur_member->paused, + res = snprintf(value + value_len, sizeof(value) - value_len, "%s;%d;%d;%d%s", + cur_member->interface, cur_member->penalty, cur_member->paused, cur_member->dynamic, cur_member->next ? "|" : ""); if (res != strlen(value + value_len)) { ast_log(LOG_WARNING, "Could not create persistent member string, out of space\n"); @@ -2842,7 +2842,7 @@ /* Reload dynamic queue members persisted into the astdb */ static void reload_queue_members(void) { - char *cur_ptr; + char *cur_ptr; char *queue_name; char *member; char *interface; @@ -2850,6 +2850,7 @@ int penalty = 0; char *paused_tok; int paused = 0; + char *type_tok; struct ast_db_entry *db_tree; struct ast_db_entry *entry; struct call_queue *cur_queue; @@ -2889,6 +2890,7 @@ interface = strsep(&member, ";"); penalty_tok = strsep(&member, ";"); paused_tok = strsep(&member, ";"); + type_tok = strsep(&member, ";"); if (!penalty_tok) { ast_log(LOG_WARNING, "Error parsing persistent member string for '%s' (penalty)\n", queue_name); @@ -2912,11 +2914,17 @@ if (option_debug) ast_log(LOG_DEBUG, "Reload Members: Queue: %s Member: %s Penalty: %d Paused: %d\n", queue_name, interface, penalty, paused); - - if (add_to_queue(queue_name, interface, penalty, paused, 0) == RES_OUTOFMEMORY) { - ast_log(LOG_ERROR, "Out of Memory when reloading persistent queue member\n"); - break; + + if (strtol(type_tok, NULL, 10)) { + if (add_to_queue(queue_name, interface, penalty, paused, 0) == RES_OUTOFMEMORY) { + ast_log(LOG_ERROR, "Out of Memory when reloading persistent queue member\n"); + break; + } } + else { + if (set_member_paused(queue_name, interface, 1)) + ast_log(LOG_WARNING, "Interface '%s' could not be paused on queue '%s', not found!", queue_name, interface); + } } }