From: Volker Lendecke Date: Thu, 3 Jul 2008 13:58:37 +0000 (+0200) Subject: Return timed out entries from gencache_get if timeout param != NULL X-Git-Tag: samba-3.3.0pre1~685 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2954b2be563149380e1fae7fe088b98d6cbd42e7;p=thirdparty%2Fsamba.git 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. --- diff --git a/source/lib/gencache.c b/source/lib/gencache.c index b773f83c581..1b4342a62bb 100644 --- a/source/lib/gencache.c +++ b/source/lib/gencache.c @@ -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. diff --git a/source/utils/net_cache.c b/source/utils/net_cache.c index 4e9ae18c0d9..21fcc9155d1 100644 --- a/source/utils/net_cache.c +++ b/source/utils/net_cache.c @@ -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; }