diff --git a/apps/app_queue.c b/apps/app_queue.c index f3b331a877..313163576f 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1784,6 +1784,7 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies int status; char tech[256]; char *location; + const char *macrocontext, *macroexten; /* on entry here, we know that tmp->chan == NULL */ if (qe->parent->wrapuptime && (time(NULL) - tmp->lastcall < qe->parent->wrapuptime)) { @@ -1865,14 +1866,18 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies tmp->chan->adsicpe = qe->chan->adsicpe; /* Inherit context and extension */ - if (!ast_strlen_zero(qe->chan->macrocontext)) - ast_copy_string(tmp->chan->dialcontext, qe->chan->macrocontext, sizeof(tmp->chan->dialcontext)); + ast_channel_lock(qe->chan); + macrocontext = pbx_builtin_getvar_helper(qe->chan, "MACRO_CONTEXT"); + if (!ast_strlen_zero(macrocontext)) + ast_copy_string(tmp->chan->dialcontext, macrocontext, sizeof(tmp->chan->dialcontext)); else ast_copy_string(tmp->chan->dialcontext, qe->chan->context, sizeof(tmp->chan->dialcontext)); - if (!ast_strlen_zero(qe->chan->macroexten)) - ast_copy_string(tmp->chan->exten, qe->chan->macroexten, sizeof(tmp->chan->exten)); + macroexten = pbx_builtin_getvar_helper(qe->chan, "MACRO_EXTEN"); + if (!ast_strlen_zero(macroexten)) + ast_copy_string(tmp->chan->exten, macroexten, sizeof(tmp->chan->exten)); else ast_copy_string(tmp->chan->exten, qe->chan->exten, sizeof(tmp->chan->exten)); + ast_channel_unlock(qe->chan); /* Place the call, but don't wait on the answer */ if ((res = ast_call(tmp->chan, location, 0))) {