diff options
author | zuul <zuul@gerrit.asterisk.org> | 2016-08-29 14:56:27 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-08-29 14:56:27 -0500 |
commit | 8bdd5b63dfe60d659ae8bb5c62929f979567acea (patch) | |
tree | 02583b4be3abf2410e0d49a9710f6ad13719e86d | |
parent | b0b480592a8534142e5deb1d9fd41532a29521f7 (diff) | |
parent | c21e6764f13a050d478e5aea6388e35ae57007e9 (diff) |
Merge "app_queue: Ensure member is removed from pending when hanging up."
-rw-r--r-- | apps/app_queue.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index a5cb12640..f9dd86b67 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -4102,6 +4102,17 @@ static void hangupcalls(struct queue_ent *qe, struct callattempt *outgoing, stru ast_channel_hangupcause_set(outgoing->chan, AST_CAUSE_ANSWERED_ELSEWHERE); } ast_channel_publish_dial(qe->chan, outgoing->chan, outgoing->interface, "CANCEL"); + + /* 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; |