From a015dd523820a6f711ef217a3925daeea18908b6 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 24 Feb 2022 07:51:57 +0000 Subject: [PATCH] more --- source/libs/tdb/src/db/tdbPCache.c | 7 +++++-- source/libs/tdb/src/db/tdbPFile.c | 14 ++++++++------ source/libs/tdb/src/inc/tdbPCache.h | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index a62cfbdf59..84010b28cc 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -120,7 +120,10 @@ static SPgHdr *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, bool alcN } if (pPage || !alcNewPage) { - if (pPage) tdbPCachePinPage(pPage); + if (pPage) { + ASSERT(pPage->isLoad == 1); + tdbPCachePinPage(pPage); + } return pPage; } @@ -147,7 +150,7 @@ static SPgHdr *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, bool alcN if (pPage) { memcpy(&(pPage->pgid), pPgid, sizeof(*pPgid)); pPage->pLruNext = NULL; - // *(void **)pPage->page.pExtra = 0; (TODO) + pPage->isLoad = 0; tdbPCacheAddPageToHash(pPage); } diff --git a/source/libs/tdb/src/db/tdbPFile.c b/source/libs/tdb/src/db/tdbPFile.c index db64ea2fe0..e9d037ec02 100644 --- a/source/libs/tdb/src/db/tdbPFile.c +++ b/source/libs/tdb/src/db/tdbPFile.c @@ -84,12 +84,14 @@ SPgHdr *tdbPFileGet(SPFile *pFile, SPgno pgno) { } tdbPCacheFetchFinish(pFile->pCache, pPage); - if (pgno > pFile->dbFileSize /*TODO*/) { - memset(pPage->pData, 0, pFile->pageSize); - } else { - if (tdbPFileReadPage(pFile, pPage) < 0) { - // TODO: handle error - return NULL; + if (!(pPage->isLoad)) { + if (pgno > pFile->dbFileSize /*TODO*/) { + memset(pPage->pData, 0, pFile->pageSize); + } else { + if (tdbPFileReadPage(pFile, pPage) < 0) { + // TODO: handle error + return NULL; + } } } diff --git a/source/libs/tdb/src/inc/tdbPCache.h b/source/libs/tdb/src/inc/tdbPCache.h index db936dad8c..dcc4ecfd3a 100644 --- a/source/libs/tdb/src/inc/tdbPCache.h +++ b/source/libs/tdb/src/inc/tdbPCache.h @@ -29,6 +29,7 @@ struct SPgHdr { SPgid pgid; u8 isAnchor; u8 isLocalPage; + u8 isLoad; i32 nRef; SPCache *pCache; SPgHdr * pFreeNext; -- GitLab