diff --git a/apps/app_queue.c b/apps/app_queue.c index 6ad65a2c40..84564c55b7 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -3482,6 +3482,16 @@ static void hangupcalls(struct callattempt *outgoing, struct ast_channel *except if (exception || cancel_answered_elsewhere) { ast_channel_hangupcause_set(outgoing->chan, AST_CAUSE_ANSWERED_ELSEWHERE); } + /* When dialing channels it is possible that they may not ever + * leave the not in use state (Local channels in particular) by + * the time we cancel them. If this occurs but we know they were + * dialed we explicitly remove them from the pending members + * container so that subsequent call attempts occur. + */ + if (outgoing->member->status == AST_DEVICE_NOT_INUSE) { + pending_members_remove(outgoing->member); + } + ast_hangup(outgoing->chan); } oo = outgoing;