From 983339f1f68d6a3a76b75807b3b7fd1f84b71fa2 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 3 Mar 2022 08:31:00 +0000 Subject: [PATCH] more --- source/libs/tdb/src/db/tdbPager.c | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index e73d15fe7f..41fcdd285f 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -260,17 +260,23 @@ int tdbPagerFetchPage(SPager *pPager, SPgno pgno, SPage **ppPage) { if (pPage->pPager == NULL) { ASSERT(pgno < pPager->dbOrigSize); - ret = tdbPagerReadPage(pPager, pPage); - if (ret < 0) { - return -1; + // tdbWLockPage(pPage); + + if (pPage->pPager == NULL) { + ret = tdbPagerReadPage(pPager, pPage); + if (ret < 0) { + return -1; + } + + // ret = (*initPage)(pPage); + // if (ret < 0) { + // return -1; + // } + + pPage->pPager = pPager; } - // ret = (*initPage)(pPage); - // if (ret < 0) { - // return -1; - // } - - pPage->pPager = pPager; + // tdbWUnlockPage(pPage); } else { ASSERT(pPage->pPager == pPager); } @@ -302,9 +308,18 @@ int tdbPagerNewPage(SPager *pPager, SPgno *ppgno, SPage **ppPage) { ASSERT(pPage->pPager == NULL); + // TODO: a race condition problem may occur here + + // tdbWLockPage(pPage); + // TODO: zero init the new page // (*initNewPage)(pPage, arg); + pPage->pPager = NULL; + + // tdbWunlockPage(pPage); + + *ppPage = pPage; return 0; }