mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
lib:util: Avoid free'ing our own pointer
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14625 Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> Autobuild-User(master): Ralph Böhme <slow@samba.org> Autobuild-Date(master): Wed Feb 3 10:57:01 UTC 2021 on sn-devel-184
This commit is contained in:
parent
00543ab3b2
commit
0bdbe50fac
@ -223,14 +223,25 @@ static void memcache_delete_element(struct memcache *cache,
|
||||
TALLOC_FREE(e);
|
||||
}
|
||||
|
||||
static void memcache_trim(struct memcache *cache)
|
||||
static void memcache_trim(struct memcache *cache, struct memcache_element *e)
|
||||
{
|
||||
struct memcache_element *tail = NULL;
|
||||
|
||||
if (cache->max_size == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
while ((cache->size > cache->max_size) && DLIST_TAIL(cache->mru)) {
|
||||
memcache_delete_element(cache, DLIST_TAIL(cache->mru));
|
||||
for (tail = DLIST_TAIL(cache->mru);
|
||||
(cache->size > cache->max_size) && (tail != NULL);
|
||||
tail = DLIST_TAIL(cache->mru))
|
||||
{
|
||||
if (tail == e) {
|
||||
tail = DLIST_PREV(tail);
|
||||
if (tail == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
memcache_delete_element(cache, tail);
|
||||
}
|
||||
}
|
||||
|
||||
@ -351,7 +362,7 @@ void memcache_add(struct memcache *cache, enum memcache_number n,
|
||||
memcpy(&mtv, cache_value.data, sizeof(mtv));
|
||||
cache->size += mtv.len;
|
||||
}
|
||||
memcache_trim(cache);
|
||||
memcache_trim(cache, e);
|
||||
}
|
||||
|
||||
void memcache_add_talloc(struct memcache *cache, enum memcache_number n,
|
||||
|
@ -1 +0,0 @@
|
||||
^samba.unittests.memcache.torture_memcache_add_oversize
|
Loading…
x
Reference in New Issue
Block a user