mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-22 04:10:48 +00:00
MINOR: lru: new function to delete <nb> least recently used keys
Introduction of a new function in the LRU cache source file. Purpose of this function is to be used to delete a number of entries in the cache. 'number' is defined by the caller and the key removed are taken at the tail of the tree
This commit is contained in:
parent
b631c291c9
commit
22c4ed6937
@ -72,3 +72,4 @@ struct lru64 *lru64_get(unsigned long long key, struct lru64_head *lru, void *do
|
||||
void lru64_commit(struct lru64 *elem, void *data, void *domain, unsigned long long revision, void (*free)(void *));
|
||||
struct lru64_head *lru64_new(int size);
|
||||
int lru64_destroy(struct lru64_head *lru);
|
||||
void lru64_kill_oldest(struct lru64_head *lru, unsigned long int nb);
|
||||
|
25
src/lru.c
25
src/lru.c
@ -199,6 +199,31 @@ int lru64_destroy(struct lru64_head *lru)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* kill the <nb> least used entries from the <lru> cache */
|
||||
void lru64_kill_oldest(struct lru64_head *lru, unsigned long int nb)
|
||||
{
|
||||
struct lru64 *elem, *next;
|
||||
|
||||
for (elem = container_of(lru->list.p, typeof(*elem), lru);
|
||||
nb && (&elem->lru != &lru->list);
|
||||
elem = next) {
|
||||
next = container_of(elem->lru.p, typeof(*next), lru);
|
||||
if (!elem->domain)
|
||||
continue; /* locked entry */
|
||||
|
||||
LIST_DEL(&elem->lru);
|
||||
eb64_delete(&elem->node);
|
||||
if (elem->data && elem->free)
|
||||
elem->free(elem->data);
|
||||
if (!lru->spare)
|
||||
lru->spare = elem;
|
||||
else
|
||||
free(elem);
|
||||
lru->cache_usage--;
|
||||
nb--;
|
||||
}
|
||||
}
|
||||
|
||||
/* The code below is just for validation and performance testing. It's an
|
||||
* example of a function taking some time to return results that could be
|
||||
* cached.
|
||||
|
Loading…
Reference in New Issue
Block a user