aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_queue.c
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 /apps/app_queue.c
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
Diffstat (limited to 'apps/app_queue.c')
-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) {