mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-20 21:31:28 +02: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 *));
|
void lru64_commit(struct lru64 *elem, void *data, void *domain, unsigned long long revision, void (*free)(void *));
|
||||||
struct lru64_head *lru64_new(int size);
|
struct lru64_head *lru64_new(int size);
|
||||||
int lru64_destroy(struct lru64_head *lru);
|
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;
|
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
|
/* 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
|
* example of a function taking some time to return results that could be
|
||||||
* cached.
|
* cached.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user