Index: trunk/Ohana/src/opihi/pantasks/CheckTimeRanges.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/CheckTimeRanges.c	(revision 8191)
+++ trunk/Ohana/src/opihi/pantasks/CheckTimeRanges.c	(revision 8192)
@@ -1,9 +1,13 @@
 # include "pantasks.h"
+
+/* the tested time is saved by CheckTimeRanges for a following BumpTimeRanges
+   otherwise we could have an inconsistency between valid ranges and Nrun */
+static time_t daytime, weektime, abstime;
 
 /* test if we meet all time range qualifications */
 int CheckTimeRanges (TimeRange *ranges, int Nranges) {
 
-  int i, intime, valid;
-  time_t daytime, weektime, abstime, testtime;
+  int i, intime, Ninclude, include, exclude, valid;
+  time_t testtime;
   struct timeval now;
   struct tm Now;
@@ -16,6 +20,11 @@
   abstime  = now.tv_sec;
 
-  valid = TRUE;
-  for (i = 0; (i < Nranges) && valid; i++) {
+  Ninclude = 0;
+  include = FALSE;
+  exclude = FALSE;
+  
+  for (i = 0; i < Nranges; i++) {
+    if (ranges[i].include) Ninclude ++;
+
     switch (ranges[i].type) {
       /* set the testtime */
@@ -35,15 +44,20 @@
 
     /* check for more than max runs in time range */
-    if (ranges[i].keep && intime && ranges[i].Nmax) {
+    if (ranges[i].include && intime && ranges[i].Nmax) {
       if (ranges[i].Nrun >= ranges[i].Nmax) return (FALSE);
     }
     /* reset Nrun if we are outside of intime */
-    if (ranges[i].keep && !intime && ranges[i].Nmax && ranges[i].Nrun) {
+    if (ranges[i].include && !intime && ranges[i].Nmax && ranges[i].Nrun) {
       ranges[i].Nrun = 0;
     }
 
     /* is this a valid time? */
-    valid = ranges[i].keep ? intime : !intime;
+    if ( ranges[i].include &&  intime) include = TRUE;
+    if (!ranges[i].include && !intime) exclude = TRUE;
   }
+
+  if (Ninclude == 0) include = TRUE;
+  valid = include && !exclude;
+
   return (valid);
 }  
@@ -53,10 +67,30 @@
 int BumpTimeRanges (TimeRange *ranges, int Nranges) {
 
-  int i;
+  int i, intime;
+  time_t testtime;
 
+  /* only increment the counter for ranges which are valid */
   for (i = 0; i < Nranges; i++) {
-    if (ranges[i].keep && ranges[i].Nmax) {
-      ranges[i].Nrun ++;
+    if (!ranges[i].Nmax) continue;
+    if (!ranges[i].include) continue;
+
+    switch (ranges[i].type) {
+      /* set the testtime */
+      case RANGE_ABS:
+	testtime = abstime;
+	break;
+      case RANGE_DAY:
+	testtime = daytime;
+	break;
+      case RANGE_WEEK:
+	testtime = weektime;
+	break;
+      default:
+	abort ();
     }
+    intime = (testtime >= ranges[i].start) && (testtime <= ranges[i].stop);
+
+    /* reset Nrun if we are outside of intime */
+    if (intime) ranges[i].Nrun ++;
   }
   return (TRUE);
