summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-07-03 15:58:37 +0200
committerVolker Lendecke <vl@samba.org>2008-07-03 15:59:19 +0200
commitc4503f5658282169f38ac87fd2d82a9b67273037 (patch)
tree0beb76987ae4f4a4d6d1ea1bbcd625470166112e
parent962beb287239b525ed4828ae13b85de31448d256 (diff)
downloadsamba-c4503f5658282169f38ac87fd2d82a9b67273037.tar.gz
samba-c4503f5658282169f38ac87fd2d82a9b67273037.tar.bz2
samba-c4503f5658282169f38ac87fd2d82a9b67273037.zip
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)
-rw-r--r--source3/lib/gencache.c25
-rw-r--r--source3/utils/net_cache.c3
2 files changed, 17 insertions, 11 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c
index b773f83c58..1b4342a62b 100644
--- a/source3/lib/gencache.c
+++ b/source3/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/source3/utils/net_cache.c b/source3/utils/net_cache.c
index 4e9ae18c0d..21fcc9155d 100644
--- a/source3/utils/net_cache.c
+++ b/source3/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;
}