mirror of
https://github.com/samba-team/samba.git
synced 2024-12-31 17:18:04 +03:00
Fix lpq_cache time check (missed from yesterday).
Jeremy.
(This used to be commit 21c8acd25a
)
This commit is contained in:
parent
6df2dc56ff
commit
d2377ad556
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user