diff options
author | Volker Lendecke <vl@samba.org> | 2008-07-03 15:58:37 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2008-07-03 15:59:19 +0200 |
commit | c4503f5658282169f38ac87fd2d82a9b67273037 (patch) | |
tree | 0beb76987ae4f4a4d6d1ea1bbcd625470166112e /source3/lib | |
parent | 962beb287239b525ed4828ae13b85de31448d256 (diff) | |
download | samba-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)
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/gencache.c | 25 |
1 files changed, 15 insertions, 10 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. |