diff options
-rwxr-xr-x | channels/chan_zap.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c index e4b64cc6b..ca3936a94 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; |