From f88b8468c52a8be67a61187ee28cab6448bc7609 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Mon, 11 Mar 2019 13:46:22 -0400 Subject: Fix an issue with `PreserveJobHistory` and time values (Issue #5538) --- scheduler/job.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'scheduler') diff --git a/scheduler/job.c b/scheduler/job.c index d924b2eb5..fe8eeb7c9 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -434,10 +434,20 @@ cupsdCleanJobs(void) curtime = time(NULL); JobHistoryUpdate = 0; + cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: curtime=%d", (int)curtime); + for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { + cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: Job %d, state=%d, printer=%p, history_time=%d, file_time=%d", job->id, (int)job->state_value, (void *)job->printer, (int)job->history_time, (int)job->file_time); + + if ((job->history_time && job->history_time) < JobHistoryUpdate || !JobHistoryUpdate) + JobHistoryUpdate = job->history_time; + + if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate) + JobHistoryUpdate = job->file_time; + if (job->state_value >= IPP_JOB_CANCELED && !job->printer) { /* @@ -453,21 +463,9 @@ cupsdCleanJobs(void) else if (job->file_time && job->file_time <= curtime) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Removing document files."); - cupsdLogJob(job, CUPSD_LOG_DEBUG2, "curtime=%ld, job->file_time=%ld", (long)curtime, (long)job->file_time); remove_job_files(job); cupsdMarkDirty(CUPSD_DIRTY_JOBS); - - if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) - JobHistoryUpdate = job->history_time; - } - else - { - if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) - JobHistoryUpdate = job->history_time; - - if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate) - JobHistoryUpdate = job->file_time; } } } @@ -1726,7 +1724,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */ job->completed_time = attr->values[0].integer; if (JobHistory < INT_MAX) - job->history_time = attr->values[0].integer + JobHistory; + job->history_time = job->completed_time + JobHistory; else job->history_time = INT_MAX; @@ -1737,7 +1735,7 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */ JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX) - job->file_time = attr->values[0].integer + JobFiles; + job->file_time = job->completed_time + JobFiles; else job->file_time = INT_MAX; @@ -2857,8 +2855,10 @@ cupsdUpdateJobs(void) * Update history/file expiration times... */ + job->completed_time = attr->values[0].integer; + if (JobHistory < INT_MAX) - job->history_time = attr->values[0].integer + JobHistory; + job->history_time = job->completed_time + JobHistory; else job->history_time = INT_MAX; @@ -2872,7 +2872,7 @@ cupsdUpdateJobs(void) JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX) - job->file_time = attr->values[0].integer + JobFiles; + job->file_time = job->completed_time + JobFiles; else job->file_time = INT_MAX; @@ -4707,7 +4707,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */ job->completed_time = curtime; if (JobHistory < INT_MAX && attr) - job->history_time = attr->values[0].integer + JobHistory; + job->history_time = job->completed_time + JobHistory; else job->history_time = INT_MAX; @@ -4715,7 +4715,7 @@ set_time(cupsd_job_t *job, /* I - Job to update */ JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX && attr) - job->file_time = curtime + JobFiles; + job->file_time = job->completed_time + JobFiles; else job->file_time = INT_MAX; -- cgit v1.2.1