]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Simplified pri_dchannel() poll timeout duration code.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 2 Sep 2010 21:02:54 +0000 (21:02 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 2 Sep 2010 21:02:54 +0000 (21:02 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@284780 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/sig_pri.c

index 4ff425c9149db5e2eff1dfbed91058c457c7a3f9..c75badd6646ff94adaae6b8499f06eb3aba0b1eb 100644 (file)
@@ -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);