|
|
@ -4176,38 +4176,38 @@ static void *pri_dchannel(void *vpri)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* Start with reasonable max */
|
|
|
|
/* Start with reasonable max */
|
|
|
|
|
|
|
|
if (doidling || pri->resetting) {
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Make sure we stop at least once per second if we're
|
|
|
|
|
|
|
|
* monitoring idle channels
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
lowest = ast_tv(1, 0);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
/* Don't poll for more than 60 seconds */
|
|
|
|
lowest = ast_tv(60, 0);
|
|
|
|
lowest = ast_tv(60, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
|
|
|
|
for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
|
|
|
|
/* Find lowest available d-channel */
|
|
|
|
if (!pri->dchans[i]) {
|
|
|
|
if (!pri->dchans[i])
|
|
|
|
/* We scanned all D channels on this span. */
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
if ((next = pri_schedule_next(pri->dchans[i]))) {
|
|
|
|
}
|
|
|
|
|
|
|
|
next = pri_schedule_next(pri->dchans[i]);
|
|
|
|
|
|
|
|
if (next) {
|
|
|
|
/* We need relative time here */
|
|
|
|
/* We need relative time here */
|
|
|
|
tv = ast_tvsub(*next, ast_tvnow());
|
|
|
|
tv = ast_tvsub(*next, ast_tvnow());
|
|
|
|
if (tv.tv_sec < 0) {
|
|
|
|
if (tv.tv_sec < 0) {
|
|
|
|
tv = ast_tv(0,0);
|
|
|
|
/*
|
|
|
|
}
|
|
|
|
* A timer has already expired.
|
|
|
|
if (doidling || pri->resetting) {
|
|
|
|
* By definition zero time is the lowest so we can quit early.
|
|
|
|
if (tv.tv_sec > 1) {
|
|
|
|
*/
|
|
|
|
tv = ast_tv(1, 0);
|
|
|
|
lowest = ast_tv(0, 0);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (tv.tv_sec > 60) {
|
|
|
|
|
|
|
|
tv = ast_tv(60, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (doidling || pri->resetting) {
|
|
|
|
|
|
|
|
/* Make sure we stop at least once per second if we're
|
|
|
|
|
|
|
|
monitoring idle channels */
|
|
|
|
|
|
|
|
tv = ast_tv(1,0);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
/* Don't poll for more than 60 seconds */
|
|
|
|
|
|
|
|
tv = ast_tv(60, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!i || ast_tvcmp(tv, lowest) < 0) {
|
|
|
|
if (ast_tvcmp(tv, lowest) < 0) {
|
|
|
|
lowest = tv;
|
|
|
|
lowest = tv;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
ast_mutex_unlock(&pri->lock);
|
|
|
|
ast_mutex_unlock(&pri->lock);
|
|
|
|
|
|
|
|
|
|
|
|
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
|
|
|
|
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
|
|
|
|