]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 43897 via svnmerge from
authorBJ Weschke <bweschke@btwtech.com>
Thu, 28 Sep 2006 16:41:05 +0000 (16:41 +0000)
committerBJ Weschke <bweschke@btwtech.com>
Thu, 28 Sep 2006 16:41:05 +0000 (16:41 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r43897 | bweschke | 2006-09-28 12:37:15 -0400 (Thu, 28 Sep 2006) | 3 lines

 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: https://origsvn.digium.com/svn/asterisk/branches/1.4@43899 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c

index 87c04f7ee1a2e1230d2a345b46733cbb40ecfced..74ee15b9321cd0d886d87428677e2256e85071ea 100644 (file)
@@ -529,7 +529,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);
@@ -547,7 +554,14 @@ static void *changethread(void *data)
        AST_LIST_TRAVERSE(&queues, q, list) {
                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) {