This fixes dahdi_request to properly set the cause
code to CONGESTION instead of BUSY if no channels
were actually available.
Currently, the cause is erroneously set to busy
if the channel itself is found, regardless of its
current state. However, if the channel is not available
(e.g. T1 down, card not operable, etc.), then the
channel itself may not be in a functional state,
in which case CHANUNAVAIL is the correct cause to use.
This adds a simple check to ensure that busy tone
is only returned if a channel is encountered that
has an owner, since that is the only possible way
that a channel could actually be busy.
ASTERISK-30274 #close
Change-Id: Iad5870223c081240c925b19df8d6af136953b994
struct ast_channel *tmp = NULL;
struct dahdi_pvt *exitpvt;
int channelmatched = 0;
+ int foundowner = 0;
int groupmatched = 0;
#if defined(HAVE_PRI) || defined(HAVE_SS7)
int transcapdigital = 0;
if (start.roundrobin)
round_robin[start.rr_starting_point] = p;
+ if (p->owner) {
+ foundowner++;
+ }
+
if (is_group_or_channel_match(p, start.span, start.groupmatch, &groupmatched, start.channelmatch, &channelmatched)
&& available(&p, channelmatched)) {
ast_debug(1, "Using channel %d\n", p->channel);
ast_mutex_unlock(&iflock);
restart_monitor();
if (cause && !tmp) {
- if (callwait || channelmatched) {
+ if (callwait || (channelmatched && foundowner)) {
*cause = AST_CAUSE_BUSY;
} else if (groupmatched) {
*cause = AST_CAUSE_CONGESTION;