1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

Return timed out entries from gencache_get if timeout param != NULL

net cache get was the only one interested in the timeout. That single caller
can take care of the timeout itself then.

With this API change idmap_cache.c can be converted to gencache.
(This used to be commit 2954b2be563149380e1fae7fe088b98d6cbd42e7)
This commit is contained in:
Volker Lendecke 2008-07-03 15:58:37 +02:00
parent 962beb2872
commit c4503f5658
2 changed files with 17 additions and 11 deletions

View File

@ -166,15 +166,16 @@ bool gencache_del(const char *keystr)
*
* @param keystr string that represents a key of this entry
* @param valstr buffer that is allocated and filled with the entry value
* buffer's disposing must be done outside
* @param timeout pointer to a time_t that is filled with entry's
* timeout
* buffer's disposing must be done outside
* @param timeout If == NULL, the caller is not interested in timed out
* entries. If != NULL, return the timeout timestamp, the
* caller must figure out itself if this entry is timed out.
*
* @retval true when entry is successfuly fetched
* @retval False for failure
**/
bool gencache_get(const char *keystr, char **valstr, time_t *timeout)
bool gencache_get(const char *keystr, char **valstr, time_t *ptimeout)
{
TDB_DATA databuf;
time_t t;
@ -207,9 +208,13 @@ bool gencache_get(const char *keystr, char **valstr, time_t *timeout)
"timeout = %s", t > time(NULL) ? "valid" :
"expired", keystr, endptr+1, ctime(&t)));
if (t <= time(NULL)) {
if ((t <= time(NULL)) && (ptimeout == NULL)) {
/*
* The entry is expired, and the caller isn't interested in
* timed out ones. Delete it.
*/
/* We're expired, delete the entry */
tdb_delete_bystring(cache, keystr);
SAFE_FREE(databuf.dptr);
@ -224,15 +229,15 @@ bool gencache_get(const char *keystr, char **valstr, time_t *timeout)
return False;
}
}
SAFE_FREE(databuf.dptr);
if (timeout) {
*timeout = t;
if (ptimeout) {
*ptimeout = t;
}
return True;
}
}
/**
* Get existing entry from the cache file.

View File

@ -225,7 +225,8 @@ static int net_cache_get(struct net_context *c, int argc, const char **argv)
return -1;
}
if (gencache_get(keystr, &valuestr, &timeout)) {
if (gencache_get(keystr, &valuestr, &timeout)
&& (timeout > time(NULL))) {
print_cache_entry(keystr, valuestr, timeout, NULL);
return 0;
}