1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

Avoid reading or writing the 32 locking bytes at the end of the first

meta-page of an LSM database.

FossilOrigin-Name: 2b5df3e8a80ae5c0415081dd9b29acaad1464be2e7971399e52c1c98408322d9
This commit is contained in:
dan
2017-06-29 20:13:44 +00:00
parent 97e8b3ea32
commit 28508ddb42
5 changed files with 38 additions and 22 deletions

View File

@ -214,6 +214,7 @@ struct FileSystem {
char *zDb; /* Database file name */
char *zLog; /* Database file name */
int nMetasize; /* Size of meta pages in bytes */
int nMetaRwSize; /* Read/written size of meta pages in bytes */
int nPagesize; /* Database page-size in bytes */
int nBlocksize; /* Database block-size in bytes */
@ -635,7 +636,8 @@ int lsmFsOpen(
pFS->zLog = &pFS->zDb[nDb+1];
pFS->nPagesize = LSM_DFLT_PAGE_SIZE;
pFS->nBlocksize = LSM_DFLT_BLOCK_SIZE;
pFS->nMetasize = 4 * 1024;
pFS->nMetasize = LSM_META_PAGE_SIZE;
pFS->nMetaRwSize = LSM_META_RW_PAGE_SIZE;
pFS->pDb = pDb;
pFS->pEnv = pDb->pEnv;
@ -2271,7 +2273,9 @@ int lsmFsMetaPageGet(
}else{
pPg->aData = lsmMallocRc(pFS->pEnv, pFS->nMetasize, &rc);
if( rc==LSM_OK && bWrite==0 ){
rc = lsmEnvRead(pFS->pEnv, pFS->fdDb, iOff, pPg->aData, pFS->nMetasize);
rc = lsmEnvRead(
pFS->pEnv, pFS->fdDb, iOff, pPg->aData, pFS->nMetaRwSize
);
}
#ifndef NDEBUG
/* pPg->aData causes an uninitialized access via a downstreadm write().
@ -2311,7 +2315,7 @@ int lsmFsMetaPageRelease(MetaPage *pPg){
if( pFS->nMapLimit==0 ){
if( pPg->bWrite ){
i64 iOff = (pPg->iPg==2 ? pFS->nMetasize : 0);
int nWrite = pFS->nMetasize;
int nWrite = pFS->nMetaRwSize;
rc = lsmEnvWrite(pFS->pEnv, pFS->fdDb, iOff, pPg->aData, nWrite);
}
lsmFree(pFS->pEnv, pPg->aData);
@ -2328,7 +2332,7 @@ int lsmFsMetaPageRelease(MetaPage *pPg){
** set *pnData to the size of the meta-page in bytes before returning.
*/
u8 *lsmFsMetaPageData(MetaPage *pPg, int *pnData){
if( pnData ) *pnData = pPg->pFS->nMetasize;
if( pnData ) *pnData = pPg->pFS->nMetaRwSize;
return pPg->aData;
}