Skip to content

Commit

Permalink
scheduler/job.c: Fix extensive logging in scheduler
Browse files Browse the repository at this point in the history
Based on currently unknown trigger scheduler sometimes sets
JobHistoryUpdate into past, which causes `select()` to timeout after one
second.

It happens when `job->file_time` of a job without files to remove gets
assigned to `JobHistoryUpdate`. If we check for `job->num_files` and
assign the `job->file_time` only if there are any, we will fix extensive
logging (and unneeded cupsd execution) in various places, e.g. cleaning
jobs, expiring subscriptions, deleting temporary queues...

Fixes #604
  • Loading branch information
zdohnal committed Jul 27, 2023
1 parent d705eca commit 541f72d
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions scheduler/job.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,12 +443,12 @@ cupsdCleanJobs(void)
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);
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: Job %d, state=%d, printer=%p, history_time=%d, file_time=%d, num_files=%d", job->id, (int)job->state_value, (void *)job->printer, (int)job->history_time, (int)job->file_time, (int)job->num_files);

if ((job->history_time && job->history_time < JobHistoryUpdate) || !JobHistoryUpdate)
JobHistoryUpdate = job->history_time;

if ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate)
if (job->num_files > 0 && ((job->file_time && job->file_time < JobHistoryUpdate) || !JobHistoryUpdate))
JobHistoryUpdate = job->file_time;

if (job->state_value >= IPP_JOB_CANCELED && !job->printer)
Expand Down

0 comments on commit 541f72d

Please sign in to comment.