diff --git a/src/vm_template/ScheduledAction.cc b/src/vm_template/ScheduledAction.cc index 3fe10efd37..dba0b95213 100644 --- a/src/vm_template/ScheduledAction.cc +++ b/src/vm_template/ScheduledAction.cc @@ -359,7 +359,7 @@ time_t SchedAction::next_action() /* --------------------------------------------------------------------- */ /* Check if action is already finished */ /* --------------------------------------------------------------------- */ - int end_value; + time_t end_value; int rc = vector_value("END_VALUE", end_value); if ( rc == -1 && eo != NEVER) @@ -427,26 +427,26 @@ time_t SchedAction::next_action() case HOURLY: case NONE: - break; + return -1; } - std::set::iterator it = _days.lower_bound(cday); - int delta = 0; - if (it == _days.end()) //after last day in range + if (cday < *(_days.begin())) //before first day in range + { + delta = *(_days.begin()) - cday; + } + else if (cday >= *(_days.rbegin())) //after or last day in range { int pdays = days_in_period(r, current_tm.tm_mon, current_tm.tm_year); delta = pdays - cday + *(_days.begin()); //assume start day is 0 } - else if (cday < *(_days.begin())) //before first day in range + else //day in range { - delta = *(_days.begin()) - cday; - } - else if (*it != cday ) //is not today - { - delta = *it - cday; + std::set::iterator nday = _days.upper_bound(cday); + + delta = *nday - cday; } action_time += delta * 24 * 3600;