diff -up cups-1.4.2/scheduler/job.c.str3425 cups-1.4.2/scheduler/job.c --- cups-1.4.2/scheduler/job.c.str3425 2009-12-08 12:23:15.694500898 +0000 +++ cups-1.4.2/scheduler/job.c 2009-12-08 12:23:35.005500733 +0000 @@ -444,11 +444,11 @@ cupsdCleanJobs(void) cupsd_job_t *job; /* Current job */ - if (MaxJobs <= 0) + if (MaxJobs <= 0 && JobHistory) return; for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); - job && cupsArrayCount(Jobs) >= MaxJobs; + job && (cupsArrayCount(Jobs) >= MaxJobs || !JobHistory); job = (cupsd_job_t *)cupsArrayNext(Jobs)) if (job->state_value >= IPP_JOB_CANCELED && !job->printer) cupsdDeleteJob(job, CUPSD_JOB_PURGE); @@ -2670,8 +2670,6 @@ cupsdSetJobState( job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } - else if (!job->printer) - cupsdDeleteJob(job, CUPSD_JOB_PURGE); break; } diff -up cups-1.4.2/scheduler/main.c.str3425 cups-1.4.2/scheduler/main.c --- cups-1.4.2/scheduler/main.c.str3425 2009-12-08 12:23:15.695501397 +0000 +++ cups-1.4.2/scheduler/main.c 2009-12-08 12:23:35.007501250 +0000 @@ -397,7 +397,7 @@ main(int argc, /* I - Number of comm * parent's file descriptors to be blocking. This is a workaround for a * limitation of userland libpthread on OpenBSD. */ - + _thread_sys_closefrom(0); #endif /* __OpenBSD__ */ @@ -844,8 +844,8 @@ main(int argc, /* I - Number of comm if (timeout == 86400 && Launchd && LaunchdTimeout && !NumPolled && !cupsArrayCount(ActiveJobs) && - (!Browsing || - (!BrowseRemoteProtocols && + (!Browsing || + (!BrowseRemoteProtocols && (!NumBrowsers || !BrowseLocalProtocols || cupsArrayCount(Printers) == 0)))) { @@ -1073,6 +1073,7 @@ main(int argc, /* I - Number of comm if ((current_time - senddoc_time) >= 10) { cupsdCheckJobs(); + cupsdCleanJobs(); senddoc_time = current_time; } @@ -1231,8 +1232,8 @@ main(int argc, /* I - Number of comm #endif /* HAVE_GSSAPI */ #if defined(__APPLE__) && defined(HAVE_DLFCN_H) - /* - * Unload Print Service quota enforcement library (X Server only) + /* + * Unload Print Service quota enforcement library (X Server only) */ PSQUpdateQuotaProc = NULL; @@ -1594,13 +1595,13 @@ launchd_checkin(void) if (lis) { - cupsdLogMessage(CUPSD_LOG_DEBUG, + cupsdLogMessage(CUPSD_LOG_DEBUG, "launchd_checkin: Matched existing listener %s with fd %d...", httpAddrString(&(lis->address), s, sizeof(s)), fd); } else { - cupsdLogMessage(CUPSD_LOG_DEBUG, + cupsdLogMessage(CUPSD_LOG_DEBUG, "launchd_checkin: Adding new listener %s with fd %d...", httpAddrString(&addr, s, sizeof(s)), fd); @@ -1654,12 +1655,12 @@ launchd_checkout(void) /* * Create or remove the launchd KeepAlive file based on whether - * there are active jobs, polling, browsing for remote printers or + * there are active jobs, polling, browsing for remote printers or * shared printers to advertise... */ - if ((cupsArrayCount(ActiveJobs) || NumPolled || - (Browsing && + if ((cupsArrayCount(ActiveJobs) || NumPolled || + (Browsing && (BrowseRemoteProtocols || (BrowseLocalProtocols && NumBrowsers && cupsArrayCount(Printers)))))) {