]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix an issue with `PreserveJobHistory` and time values (Issue #5538)
authorMichael R Sweet <michael.r.sweet@gmail.com>
Mon, 11 Mar 2019 17:46:22 +0000 (13:46 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Mon, 11 Mar 2019 17:46:22 +0000 (13:46 -0400)
CHANGES.md
scheduler/job.c
test/run-stp-tests.sh

index 53b246d97ecaab5fb2b69a75316cfc224d302681..072a58e3fa7df6b2dcf22f1b0b8fb63e9a1154bc 100644 (file)
@@ -1,4 +1,4 @@
-CHANGES - 2.3b8 - 2019-02-27
+CHANGES - 2.3b8 - 2019-03-11
 ============================
 
 
@@ -34,6 +34,7 @@ Changes in CUPS v2.3b8
 - Fixed compiler warnings with newer versions of GCC (Issue #5532, Issue #5533)
 - Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs
   (Issue #5535)
+- Fixed `PreserveJobHistory` bug with time values (Issue #5538)
 - Localization updates (Issue #5461, Issues #5471, Issue #5481, Issue #5486,
   Issue #5489, Issue #5491, Issue #5492, Issue #5493, Issue #5494, Issue #5495,
   Issue #5497, Issue #5499, Issue #5500, Issue #5501, Issue #5504)
index d924b2eb52a8c56cef4f5a6cefafac67378d2b69..fe8eeb7c9803e4098cdd9efb8e0537b3d2c7ee8f 100644 (file)
@@ -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;
 
index 262cf26d6976d6cbed8b81f2689252363515dee8..a4d642daec2e17ca9aded215f004749d3d1822d2 100755 (executable)
@@ -956,7 +956,7 @@ fi
 
 # Requests logged
 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
-expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
+expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2`
 if test $count != $expected; then
        echo "FAIL: $count requests logged, expected $expected."
        echo "    <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile