From: BJ Weschke Date: Thu, 28 Sep 2006 16:37:15 +0000 (+0000) Subject: app_queue is comparing the device names incorrectly while checking their statuses... X-Git-Tag: 1.2.13~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb599cc53efdd1abb5f84722f1cd571fc291a705;p=thirdparty%2Fasterisk.git 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.2@43897 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_queue.c b/apps/app_queue.c index 5d46a8df10..1a12bceebe 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) {