Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 395496) +++ apps/app_queue.c (working copy) @@ -1709,7 +1709,7 @@ * \retval 1 if the member is available * \retval 0 if the member is not available */ -static int is_member_available(struct member *mem) +static int is_member_available(struct call_queue *q, struct member *mem) { int available = 0; @@ -1734,6 +1734,10 @@ break; } + /* Let wrapuptimes override device state availability */ + if (mem->lastcall && q->wrapuptime && (time(NULL) - q->wrapuptime < mem->lastcall)) { + available = 0; + } return available; } @@ -1774,7 +1778,7 @@ /* check every member until we find one NOT_INUSE */ if (!avail) { - avail = is_member_available(m); + avail = is_member_available(q, m); } if (avail && found_member) { /* early exit as we've found an available member and the member of interest */ @@ -3384,7 +3388,7 @@ mem_iter = ao2_iterator_init(q->members, 0); while ((mem = ao2_iterator_next(&mem_iter))) { - avl += is_member_available(mem); + avl += is_member_available(q, mem); ao2_ref(mem, -1); /* If autofill is not enabled or if the queue's strategy is ringall, then @@ -6169,7 +6173,7 @@ new_member->penalty, new_member->calls, (int) new_member->lastcall, new_member->status, new_member->paused); - if (is_member_available(new_member)) { + if (is_member_available(q, new_member)) { ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name); } @@ -6235,7 +6239,7 @@ dump_queue_members(q); } - if (is_member_available(mem)) { + if (is_member_available(q, mem)) { ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name); } else if (!num_available_members(q)) { ast_devstate_changed(AST_DEVICE_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name);