From bdda6254f4d00aadddeb3983570d8124c83e2de7 Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Wed, 9 Nov 2005 01:42:38 +0000
Subject: [PATCH] correct logic for group-match CONGESTION checking

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7038 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_zap.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index e4b64cc6bb..ca3936a944 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -7240,6 +7240,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
 {
 	int res;
 	ZT_PARAMS par;
+
 	/* First, check group matching */
 	if (groupmatch) {
 		if ((p->group & groupmatch) != groupmatch)
@@ -7247,7 +7248,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
 		*groupmatched = 1;
 	}
 	/* Check to see if we have a channel match */
-	if (channelmatch) {
+	if (channelmatch != -1) {
 		if (p->channel != channelmatch)
 			return 0;
 		*channelmatched = 1;
@@ -7336,7 +7337,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
 	}
 	
 	if ((p->owner->_state != AST_STATE_UP) &&
-		((p->owner->_state != AST_STATE_RINGING) || p->outgoing)) {
+	    ((p->owner->_state != AST_STATE_RINGING) || p->outgoing)) {
 		/* If the current call is not up, then don't allow the call */
 		return 0;
 	}
@@ -7628,11 +7629,15 @@ next:
 	}
 	ast_mutex_unlock(lock);
 	restart_monitor();
-	if (channelmatched) {
-		if (callwait || (!tmp && busy))
-			*cause = AST_CAUSE_BUSY;
-	} else if (groupmatched) {
-		*cause = AST_CAUSE_CONGESTION;
+	if (callwait)
+		*cause = AST_CAUSE_BUSY;
+	else if (!tmp) {
+		if (channelmatched) {
+			if (busy)
+				*cause = AST_CAUSE_BUSY;
+		} else if (groupmatched) {
+			*cause = AST_CAUSE_CONGESTION;
+		}
 	}
 		
 	return tmp;
-- 
GitLab