From bf4897cb7467a9bd349953f22aafb970f14920dd Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Fri, 10 Dec 2010 18:12:36 +0100 Subject: [PATCH] Do not lock jobs that fall out of allowed range - rhbz#661966 --- anacron/global.h | 3 +++ anacron/lock.c | 15 +++++++++++++++ anacron/main.c | 32 +++++--------------------------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/anacron/global.h b/anacron/global.h index 91963a7..0fe3f9b 100644 --- a/anacron/global.h +++ b/anacron/global.h @@ -42,6 +42,7 @@ #define MAX_MSG 150 #include +#include #include "anacron-paths.h" /* Some declarations */ @@ -102,6 +103,8 @@ extern int running_jobs,running_mailers; extern int complaints; +extern time_t start_sec; + /* time ranges for START_HOURS_RANGE */ extern int range_start; extern int range_stop; diff --git a/anacron/lock.c b/anacron/lock.c index 68fd252..71aae09 100644 --- a/anacron/lock.c +++ b/anacron/lock.c @@ -94,6 +94,9 @@ consider_job(job_rec *jr) if (!force && b == 8) { int day_delta; + time_t jobtime; + struct tm *t; + if (sscanf(timestamp, "%4d%2d%2d", &ts_year, &ts_month, &ts_day) == 3) dn = day_num(ts_year, ts_month, ts_day); else @@ -149,6 +152,18 @@ consider_job(job_rec *jr) return 0; } } + + jobtime = start_sec + jr->delay * 60; + + t = localtime(&jobtime); + if (!now && range_start != -1 && range_stop != -1 && + (t->tm_hour < range_start || t->tm_hour >= range_stop)) + { + Debug(("The job `%s' falls out of the %02d:00-%02d:00 hours range, skipping.", + jr->ident, range_start, range_stop)); + xclose (jr->timestamp_fd); + return 0; + } } /* no! try to grab the lock */ diff --git a/anacron/main.c b/anacron/main.c index 2fd3ed5..08db810 100644 --- a/anacron/main.c +++ b/anacron/main.c @@ -55,7 +55,7 @@ sigset_t old_sigmask; /* signal mask when started */ job_rec *first_job_rec; env_rec *first_env_rec; -static time_t start_sec; /* time anacron started */ +time_t start_sec; /* time anacron started */ static volatile int got_sigalrm, got_sigchld, got_sigusr1; int running_jobs, running_mailers; /* , number of */ int range_start = -1; @@ -406,7 +406,6 @@ static void explain_intentions() { int j; - struct tm *t; j = 0; while (j < njobs) @@ -417,21 +416,8 @@ explain_intentions() } else { - time_t jobtime = start_sec + job_array[j]->delay * 60; - - t = localtime(&jobtime); - if (range_start != -1 && range_stop != -1 && - (t->tm_hour < range_start || t->tm_hour >= range_stop)) - { - Debug(("The job `%s' falls out of the %02d:00-%02d:00 hours range, skipping.", - job_array[j]->ident, range_start, range_stop)); - job_array[j]->drop_job = 1; - } - else - { - explain("Will run job `%s' in %d min.", + explain("Will run job `%s' in %d min.", job_array[j]->ident, job_array[j]->delay); - } } j++; } @@ -443,15 +429,12 @@ int main(int argc, char *argv[]) { int j; - int cwd; - - int dropped_jobs = 0; + struct timeval tv; + struct timezone tz; anacrontab = NULL; spooldir = NULL; - struct timeval tv; - struct timezone tz; if (gettimeofday(&tv, &tz) != 0) explain("Can't get exact time, failure."); @@ -514,16 +497,11 @@ main(int argc, char *argv[]) running_jobs = running_mailers = 0; for(j = 0; j < njobs; ++j) { - if (job_array[j]->drop_job == 1) - { - ++dropped_jobs; - continue; - } xsleep(time_till(job_array[j])); if (serialize) wait_jobs(); launch_job(job_array[j]); } wait_children(); - explain("Normal exit (%d job%s run)", njobs-dropped_jobs, (njobs-dropped_jobs == 1 ? "" : "s")); + explain("Normal exit (%d job%s run)", njobs, njobs == 1 ? "" : "s"); exit(0); } -- 2.40.0