summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMartin Tomec <tomec@ipex.cz>2016-12-09 19:23:37 +0100
committerMartin Tomec <tomec.martin@gmail.com>2016-12-19 10:38:53 +0100
commitd13be4eff699449172efbd9fed0ee97f6a790b6a (patch)
treec49ae7171fe9d7aeae1846adfd31653684cae67f /apps
parent791c15942bf31eba489cb6dd2f58a22d2fe6aec2 (diff)
app_queue: Ensure member is removed from pending when hanging up.
In some cases member is added to pending_members, and the channel is hung up before any extension state change. So the member would stay in pending_members forever. So when we call do_hang, we should also remove member from pending. ASTERISK-26621 #close Change-Id: Iae476b5c06481db18ebe0fa594b3e80fdc9a7d54
Diffstat (limited to 'apps')
-rw-r--r--apps/app_queue.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index c9f3aee63..d3afec22d 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -2331,6 +2331,7 @@ static int pending_members_cmp(void *obj, void *arg, int flags)
static void pending_members_remove(struct member *mem)
{
+ ast_debug(3, "Removed %s from pending_members\n", mem->membername);
ao2_find(pending_members, mem, OBJ_POINTER | OBJ_NODATA | OBJ_UNLINK);
}
@@ -4184,6 +4185,7 @@ static void do_hang(struct callattempt *o)
{
o->stillgoing = 0;
ast_hangup(o->chan);
+ pending_members_remove(o->member);
o->chan = NULL;
}
@@ -4264,6 +4266,7 @@ static int can_ring_entry(struct queue_ent *qe, struct callattempt *call)
* If not found add it to the container so another queue
* won't attempt to call this member at the same time.
*/
+ ast_debug(3, "Add %s to pending_members\n", call->member->membername);
ao2_link(pending_members, call->member);
ao2_unlock(pending_members);
@@ -4399,7 +4402,6 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies
/* Again, keep going even if there's an error */
ast_verb(3, "Couldn't call %s\n", tmp->interface);
do_hang(tmp);
- pending_members_remove(tmp->member);
++*busies;
return 0;
}