Simplified pri_dchannel() poll timeout duration code.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@284780 65c4cc65-6c06-0410-ace0-fbb531ad65f3
certified/1.8.6
Richard Mudgett 15 years ago
parent c271acacda
commit 5f2b40c699

@ -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);

Loading…
Cancel
Save