diff options
author | Laurent Bercot <ska-skaware@skarnet.org> | 2024-07-30 14:36:22 +0000 |
---|---|---|
committer | Laurent Bercot <ska@appnovation.com> | 2024-07-30 14:36:22 +0000 |
commit | 1360696c2d6ed7083a71979c8382c9d34df12cf0 (patch) | |
tree | fa3ee62017ac140d11a32d509e3d9426c72daa14 /src/libdcache/dcache_search.c | |
parent | a788cfec66d6e672fd9bf2e1038d075b5318459a (diff) | |
download | shibari-1360696c2d6ed7083a71979c8382c9d34df12cf0.tar.xz |
More stuff
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libdcache/dcache_search.c')
-rw-r--r-- | src/libdcache/dcache_search.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libdcache/dcache_search.c b/src/libdcache/dcache_search.c index 0239b88..3d79dd6 100644 --- a/src/libdcache/dcache_search.c +++ b/src/libdcache/dcache_search.c @@ -7,9 +7,18 @@ #include <shibari/dcache.h> #include "dcache-internal.h" -dcache_node_t *dcache_search (dcache_t *z, char const *key, uint16_t keylen) +dcache_node_t *dcache_search (dcache_t *z, char const *key, uint16_t keylen, tain const *stamp) { uint32_t i ; dcache_key_t k = { .s = (char *)key, .len = keylen } ; - return avltree_search(&z->by_key, &k, &i) ? DNODE(z, i) : 0 ; + if (avltree_search(&z->by_key, &k, &i)) + { + if (tain_less(&DNODE(z, i)->expire, stamp)) + { + dcache_clean_expired(z, stamp) ; + if (!avltree_search(&z->by_key, &k, &i)) return 0 ; + } + return DNODE(z, i) ; + } + else return 0 ; } |