* Fix bug 435, cron jobs are run even if the function name is not defined

* Fix a bug that caused the scheduler thread to awaken twice in immedate
   succession because of imprecise timing in Thread.sleep()
This commit is contained in:
hns 2005-07-20 13:49:37 +00:00
parent 37e51812d6
commit 6d4978f652

View file

@ -193,6 +193,8 @@ public class CronJob {
StringTokenizer st = new StringTokenizer (key.trim(), ".");
st.nextElement ();
String jobName = st.nextToken ();
if (jobName == null || jobName.equals(""))
continue;
String jobSpec = st.nextToken ();
if (jobSpec==null || jobSpec.equals("")) // might happen with cron.testname. = XXX
continue;
@ -222,7 +224,16 @@ public class CronJob {
} catch (NoSuchElementException nsee) {
}
}
List jobVec = new ArrayList (jobs.values ());
Iterator it = jobs.values().iterator();
while (it.hasNext()) {
CronJob job = (CronJob) it.next();
if (job.getFunction() == null) {
System.err.println("DROPPING CRON JOB " + job);
it.remove();
}
}
List jobVec = new ArrayList (jobs.values());
System.err.println("GOT CRON JOB LIST: " + jobVec);
return sort (jobVec);
}
@ -412,7 +423,13 @@ public class CronJob {
public static long millisToNextFullMinute () {
long now = System.currentTimeMillis();
long millisAfterMinute = (now % 60000);
return (60000 - millisAfterMinute);
// We return the interval to one second past the next full minute
// to avoid the case where the scheduler wakes up slightly before the minute
// and finishes so fast that the next call to this method returns the
// interval to the same minute instead of the next one. This happened
// sometimes with the old code and caused the scheduler to run twice in
// immediate succession.
return (61000 - millisAfterMinute);
}
/**