Index: CronTrigger.java =================================================================== --- CronTrigger.java (revision 811) +++ CronTrigger.java (working copy) @@ -862,22 +862,33 @@ public void updateWithNewCalendar(org.quartz.Calendar calendar, long misfireThreshold) { nextFireTime = getFireTimeAfter(previousFireTime); + + if (nextFireTime == null || calendar == null) { + return; + } Date now = new Date(); - do { - while (nextFireTime != null && calendar != null - && !calendar.isTimeIncluded(nextFireTime.getTime())) { - nextFireTime = getFireTimeAfter(nextFireTime); + while (nextFireTime != null && !calendar.isTimeIncluded(nextFireTime.getTime())) { + + nextFireTime = getFireTimeAfter(nextFireTime); + + if(nextFireTime == null) + break; + + //avoid infinite loop + java.util.Calendar c = java.util.Calendar.getInstance(); + c.setTime(nextFireTime); + if (c.get(java.util.Calendar.YEAR) > YEAR_TO_GIVEUP_SCHEDULING_AT) { + nextFireTime = null; } - + if(nextFireTime != null && nextFireTime.before(now)) { long diff = now.getTime() - nextFireTime.getTime(); if(diff >= misfireThreshold) { nextFireTime = getFireTimeAfter(nextFireTime); - continue; } } - }while(false); + } } /**