From 5007087e1967b0e0ab4eeaeff6e6d04d2e558c72 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Sep 2023 08:09:53 +0800 Subject: [PATCH 1/2] fix(tdb/pcache): fix mem leak with unpined pages --- source/libs/tdb/src/db/tdbPCache.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index 262f3d27e6..f157810cdc 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -229,7 +229,9 @@ void tdbPCacheInvalidatePage(SPCache *pCache, SPager *pPager, SPgno pgno) { } if (pPage) { + tdbPCachePinPage(pCache, pPage); tdbPCacheRemovePageFromHash(pCache, pPage); + tdbPCacheFreePage(pCache, pPage); } } From 3524ef32ebe1534e2dcccd8740046bbc17f9ae12 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Sep 2023 09:28:08 +0800 Subject: [PATCH 2/2] tdb/pcache: not free page if already on free list --- source/libs/tdb/src/db/tdbPCache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index f157810cdc..54baee350a 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -229,9 +229,15 @@ void tdbPCacheInvalidatePage(SPCache *pCache, SPager *pPager, SPgno pgno) { } if (pPage) { - tdbPCachePinPage(pCache, pPage); + bool moveToFreeList = false; + if (pPage->pLruNext) { + tdbPCachePinPage(pCache, pPage); + moveToFreeList = true; + } tdbPCacheRemovePageFromHash(pCache, pPage); - tdbPCacheFreePage(pCache, pPage); + if (moveToFreeList) { + tdbPCacheFreePage(pCache, pPage); + } } }