mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
s3-printing: Add method to skip refresh if just happned.
This way if multiple process try to refresh at the same time we don't do it over and over again. Signed-off-by: Andreas Schneider <asn@cynapses.org>
This commit is contained in:
parent
7022554915
commit
25a2d94974
@ -121,6 +121,12 @@ void pcap_cache_reload(struct tevent_context *ev,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!printer_list_need_refresh()) {
|
||||
/* has been just refeshed, skip */
|
||||
DEBUG(5, ("Refresh just happend, skipping.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
status = printer_list_mark_reload();
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(0, ("Failed to mark printer list for reload!\n"));
|
||||
|
@ -215,6 +215,32 @@ done:
|
||||
return status;
|
||||
}
|
||||
|
||||
bool printer_list_need_refresh(void)
|
||||
{
|
||||
NTSTATUS status;
|
||||
time_t now = time(NULL);
|
||||
time_t last_refresh;
|
||||
|
||||
status = printer_list_get_last_refresh(&last_refresh);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (now > last_refresh) {
|
||||
/* if refresh occurred last than 1 seconds ago,
|
||||
* then we probably don't need to refresh */
|
||||
if ((now - last_refresh) < 1) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
/* last_refresh newer than now, wow, someone just updated the
|
||||
* cache under our nose, do not do again. */
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
NTSTATUS printer_list_mark_reload(void)
|
||||
{
|
||||
struct db_context *db;
|
||||
|
@ -39,4 +39,6 @@ NTSTATUS printer_list_clean_old(void);
|
||||
NTSTATUS printer_list_run_fn(void (*fn)(const char *, const char *, void *),
|
||||
void *private_data);
|
||||
|
||||
bool printer_list_need_refresh(void);
|
||||
|
||||
#endif /* _PRINTER_LIST_H_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user