From: Joshua Colp Date: Thu, 25 Aug 2016 12:06:41 +0000 (+0000) Subject: app_queue: Ensure member is removed from pending when hanging up. X-Git-Tag: 11.24.0-rc1~21^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7303ac63362ee17ff1f2a84c8143adce7209cae;p=thirdparty%2Fasterisk.git app_queue: Ensure member is removed from pending when hanging up. 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. ASTERISK-26299 #close Change-Id: I6ad0d17c36480c92cebf840626228ce3f7e4bd65 --- 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;