summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-01-10 19:59:18 +0000
committerJeremy Allison <jra@samba.org>2003-01-10 19:59:18 +0000
commitd2377ad55662339e859ac67ca7f07ab2492631ec (patch)
tree792d7be3dee922c9c9964269cc1d8615b0263c07
parent6df2dc56fff6791099652575d022a2892423d65d (diff)
downloadsamba-d2377ad55662339e859ac67ca7f07ab2492631ec.tar.gz
samba-d2377ad55662339e859ac67ca7f07ab2492631ec.tar.bz2
samba-d2377ad55662339e859ac67ca7f07ab2492631ec.zip
Fix lpq_cache time check (missed from yesterday).
Jeremy. (This used to be commit 21c8acd25ac93f7ea5b77ef6005e3789a71ca50f)
-rw-r--r--source3/printing/printing.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index 711d99f394..be42664b56 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -610,6 +610,7 @@ static void print_unix_job(int snum, print_queue_struct *q)
struct traverse_struct {
print_queue_struct *queue;
int qcount, snum, maxcount, total_jobs;
+ time_t lpq_time;
};
/****************************************************************************
@@ -674,17 +675,15 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
completed, so delete the database entry. */
if (i == ts->qcount) {
- time_t cur_t = time(NULL);
/* A race can occur between the time a job is spooled and
when it appears in the lpq output. This happens when
the job is added to printing.tdb when another smbd
running print_queue_update() has completed a lpq and
is currently traversing the printing tdb and deleting jobs.
- A workaround is to not delete the job if it has been
- submitted less than lp_lpqcachetime() seconds ago. */
+ Don't delete the job if it was submitted after the lpq_time. */
- if ((cur_t - pjob.starttime) > lp_lpqcachetime())
+ if (pjob.starttime < ts->lpq_time)
pjob_delete(ts->snum, jobid);
else
ts->total_jobs++;
@@ -906,6 +905,7 @@ static void print_queue_update(int snum)
tstruct.qcount = qcount;
tstruct.snum = snum;
tstruct.total_jobs = 0;
+ tstruct.lpq_time = time(NULL);
tdb_traverse(pdb->tdb, traverse_fn_delete, (void *)&tstruct);