This commit is contained in:
Hongze Cheng 2022-10-09 15:44:01 +08:00
parent 2015db5756
commit a27677d285
1 changed files with 18 additions and 6 deletions

View File

@ -102,7 +102,7 @@ static int tdbPCacheAlterImpl(SPCache *pCache, int32_t nPage) {
return -1; return -1;
} }
for (int32_t iPage = pCache->nPage; iPage < nPage; iPage++) { for (int32_t iPage = pCache->nPages; iPage < nPage; iPage++) {
if (tdbPageCreate(pCache->szPage, &aPage[iPage], tdbDefaultMalloc, NULL) < 0) { if (tdbPageCreate(pCache->szPage, &aPage[iPage], tdbDefaultMalloc, NULL) < 0) {
// TODO: handle error // TODO: handle error
return -1; return -1;
@ -117,13 +117,15 @@ static int tdbPCacheAlterImpl(SPCache *pCache, int32_t nPage) {
aPage[iPage]->pLruPrev = NULL; aPage[iPage]->pLruPrev = NULL;
aPage[iPage]->pDirtyNext = NULL; aPage[iPage]->pDirtyNext = NULL;
// add page to free list // add to local list
aPage[iPage]->id = iPage;
}
// add page to free list
for (int32_t iPage = pCache->nPages; iPage < nPage; iPage++) {
aPage[iPage]->pFreeNext = pCache->pFree; aPage[iPage]->pFreeNext = pCache->pFree;
pCache->pFree = aPage[iPage]; pCache->pFree = aPage[iPage];
pCache->nFree++; pCache->nFree++;
// add to local list
aPage[iPage]->id = iPage;
} }
for (int32_t iPage = 0; iPage < pCache->nPage; iPage++) { for (int32_t iPage = 0; iPage < pCache->nPage; iPage++) {
@ -131,8 +133,18 @@ static int tdbPCacheAlterImpl(SPCache *pCache, int32_t nPage) {
} }
tdbOsFree(pCache->aPage); tdbOsFree(pCache->aPage);
pCache->nFree = nPage - pCache->nPage;
pCache->aPage = aPage; pCache->aPage = aPage;
} else {
for (SPage **ppPage = &pCache->pFree; *ppPage;) {
int32_t iPage = (*ppPage)->id;
if (iPage >= nPage) {
pCache->nFree--;
*ppPage = (*ppPage)->pFreeNext;
} else {
ppPage = &(*ppPage)->pFreeNext;
}
}
} }
pCache->nPages = nPage; pCache->nPages = nPage;