summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzuul <zuul@gerrit.asterisk.org>2016-08-29 14:56:27 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-08-29 14:56:27 -0500
commit8bdd5b63dfe60d659ae8bb5c62929f979567acea (patch)
tree02583b4be3abf2410e0d49a9710f6ad13719e86d
parentb0b480592a8534142e5deb1d9fd41532a29521f7 (diff)
parentc21e6764f13a050d478e5aea6388e35ae57007e9 (diff)
Merge "app_queue: Ensure member is removed from pending when hanging up."
-rw-r--r--apps/app_queue.c11
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;