aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbweschke <bweschke@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 16:37:15 +0000
committerbweschke <bweschke@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 16:37:15 +0000
commit8fad293d84cb383103d6aa4fc4507dabc9cfe2c6 (patch)
treef10602b2faf7141a66825d40631f42278b99cb9f
parent73181a03daafd64d5a6350d333ba3e2a56d5416b (diff)
app_queue is comparing the device names incorrectly while checking their statuses. It's internal list of interfaces includes the dial string, while the argument passed to this function does not have the dial string (/n for a local channel). This causes it to ignore the device state changes because it thinks it belongs to none of its members. (#8040 reported and patch by tim_ringenbach)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@43897 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_queue.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 5d46a8df1..1a12bceeb 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -483,7 +483,14 @@ static void *changethread(void *data)
AST_LIST_LOCK(&interfaces);
AST_LIST_TRAVERSE(&interfaces, curint, list) {
- if (!strcasecmp(curint->interface, sc->dev))
+ char *interface;
+ char *slash_pos;
+ interface = ast_strdupa(curint->interface);
+ if ((slash_pos = strchr(interface, '/')))
+ if ((slash_pos = strchr(slash_pos + 1, '/')))
+ *slash_pos = '\0';
+
+ if (!strcasecmp(interface, sc->dev))
break;
}
AST_LIST_UNLOCK(&interfaces);
@@ -501,7 +508,14 @@ static void *changethread(void *data)
for (q = queues; q; q = q->next) {
ast_mutex_lock(&q->lock);
for (cur = q->members; cur; cur = cur->next) {
- if (strcasecmp(sc->dev, cur->interface))
+ char *interface;
+ char *slash_pos;
+ interface = ast_strdupa(cur->interface);
+ if ((slash_pos = strchr(interface, '/')))
+ if ((slash_pos = strchr(slash_pos + 1, '/')))
+ *slash_pos = '\0';
+
+ if (strcasecmp(sc->dev, interface))
continue;
if (cur->status != sc->state) {