Index: apps/app_queue.c
===================================================================
--- apps/app_queue.c (revision 121228)
+++ apps/app_queue.c (working copy)
@@ -2600,6 +2600,7 @@
int callcompletedinsl;
struct ao2_iterator memi;
struct ast_datastore *datastore;
+ int delay = 1; /* Should we put in a small delay to ensure correct device state of the member? */
ast_channel_lock(qe->chan);
datastore = ast_channel_datastore_find(qe->chan, &dialed_interface_info, NULL);
@@ -2808,6 +2809,7 @@
outgoing = NULL;
if (announce || qe->parent->reportholdtime || qe->parent->memberdelay) {
int res2;
+ delay = 0;
res2 = ast_autoservice_start(qe->chan);
if (!res2) {
@@ -2986,6 +2988,7 @@
ast_log(LOG_DEBUG, "app_queue: agi=%s.\n", agi);
app = pbx_findapp("agi");
if (app) {
+ delay = 0;
agiexec = ast_strdupa(agi);
ret = pbx_exec(qe->chan, app, agiexec);
} else
@@ -3010,6 +3013,13 @@
ast_copy_string(oldexten, qe->chan->exten, sizeof(oldexten));
time(&callstart);
+ /* This helps avoid a race condition between the device state thread and this thread.
+ * It's possible (likely if using a Local channel or AgentCallbackLogin Agent) that the
+ * following warning message will be erroneous because agent is just about to change to "in use"
+ * but the actual state change has not occurred yet.
+ */
+ if (delay)
+ usleep(100);
if (member->status == AST_DEVICE_NOT_INUSE)
ast_log(LOG_WARNING, "The device state of this queue member, %s, is still 'Not in Use' when it probably should not be! Please check UPGRADE.txt for correct configuration settings.\n", member->membername);