mirror of
https://github.com/samba-team/samba.git
synced 2025-02-04 17:47:26 +03:00
Fix for machines that have their time changed forward, then back. Ensure
that any cached lpq information gathered during that time doesn't stay around for longer than 1 hour. Jeremy.
This commit is contained in:
parent
4b4430f1c5
commit
39fca711a5
@ -1,3 +1,6 @@
|
||||
#ifndef PRINTING_H_
|
||||
#define PRINTING_H_
|
||||
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
printing definitions
|
||||
@ -64,5 +67,9 @@ extern struct printif cups_printif;
|
||||
#define UNIX_JOB_START PRINT_MAX_JOBID
|
||||
#define NEXT_JOBID(j) ((j+1) % PRINT_MAX_JOBID > 0 ? (j+1) % PRINT_MAX_JOBID : 1)
|
||||
|
||||
#define MAX_CACHE_VALID_TIME 3600
|
||||
|
||||
#define PRINT_SPOOL_PREFIX "smbprn."
|
||||
#define PRINT_DATABASE_VERSION 2
|
||||
|
||||
#endif /* PRINTING_H_ */
|
||||
|
@ -811,14 +811,26 @@ int print_job_write(int jobid, const char *buf, int size)
|
||||
static BOOL print_cache_expired(int snum)
|
||||
{
|
||||
fstring key;
|
||||
time_t t2, t = time(NULL);
|
||||
time_t last_qscan_time, time_now = time(NULL);
|
||||
|
||||
slprintf(key, sizeof(key)-1, "CACHE/%s", lp_servicename(snum));
|
||||
t2 = tdb_fetch_int32(tdb, key);
|
||||
if (t2 == ((time_t)-1) || (t - t2) >= lp_lpqcachetime()) {
|
||||
slprintf(key, sizeof(key), "CACHE/%s", lp_servicename(snum));
|
||||
last_qscan_time = (time_t)tdb_fetch_int32(tdb, key);
|
||||
|
||||
/*
|
||||
* Invalidate the queue for 3 reasons.
|
||||
* (1). last queue scan time == -1.
|
||||
* (2). Current time - last queue scan time > allowed cache time.
|
||||
* (3). last queue scan time > current time + MAX_CACHE_VALID_TIME (1 hour by default).
|
||||
* This last test picks up machines for which the clock has been moved
|
||||
* forward, an lpq scan done and then the clock moved back. Otherwise
|
||||
* that last lpq scan would stay around for a loooong loooong time... :-). JRA.
|
||||
*/
|
||||
|
||||
if (last_qscan_time == ((time_t)-1) || (time_now - last_qscan_time) >= lp_lpqcachetime() ||
|
||||
last_qscan_time > (time_now + MAX_CACHE_VALID_TIME)) {
|
||||
DEBUG(3, ("print cache expired for queue %s \
|
||||
(last_cache = %d, time now = %d, qcachetime = %d)\n", lp_servicename(snum),
|
||||
(int)t2, (int)t, (int)lp_lpqcachetime() ));
|
||||
(last_qscan_time = %d, time now = %d, qcachetime = %d)\n", lp_servicename(snum),
|
||||
(int)last_qscan_time, (int)time_now, (int)lp_lpqcachetime() ));
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
|
Loading…
x
Reference in New Issue
Block a user