From 5f2b40c6995ca2d04d982c2f9da95db37bf70dbc Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Thu, 2 Sep 2010 21:02:54 +0000 Subject: [PATCH] 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 --- channels/sig_pri.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 4ff425c914..c75badd664 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -4176,36 +4176,36 @@ static void *pri_dchannel(void *vpri) } } /* Start with reasonable max */ - lowest = ast_tv(60, 0); + 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); + } 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; - if ((next = pri_schedule_next(pri->dchans[i]))) { + } + next = pri_schedule_next(pri->dchans[i]); + if (next) { /* We need relative time here */ tv = ast_tvsub(*next, ast_tvnow()); if (tv.tv_sec < 0) { - tv = ast_tv(0,0); + /* + * A timer has already expired. + * By definition zero time is the lowest so we can quit early. + */ + lowest = ast_tv(0, 0); + break; } - if (doidling || pri->resetting) { - if (tv.tv_sec > 1) { - tv = ast_tv(1, 0); - } - } else { - if (tv.tv_sec > 60) { - tv = ast_tv(60, 0); - } + if (ast_tvcmp(tv, lowest) < 0) { + lowest = tv; } - } 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) { - lowest = tv; } } ast_mutex_unlock(&pri->lock);