Index: src/lsm_file.c ================================================================== --- src/lsm_file.c +++ src/lsm_file.c @@ -655,11 +655,11 @@ assert( iOff>=0 && nByte>0 ); assert( p->eUseMmap!=LSM_MMAP_OFF ); assert( *ppRef==0 ); if( p->eUseMmap==LSM_MMAP_FULL ){ - fsGrowMapping(pFS, iOff+nByte, &rc); + fsGrowMapping(pFS, LSM_MAX(iOff+nByte, 8192), &rc); if( rc==LSM_OK ){ pRet = (void *)&((u8 *)p->pMap)[iOff]; *ppRef = (MmapMgrRef *)pRet; } }else{ @@ -871,11 +871,11 @@ pFS->pEnv = pDb->pEnv; if( !pDb->compress.xCompress ){ pFS->mmapmgr.eUseMmap = pDb->eMmap; pFS->mmapmgr.nMapsz = 1*1024*1024; - pFS->mmapmgr.nMapsz = 4*1024; + /* pFS->mmapmgr.nMapsz = 4*1024; */ } /* Make a copy of the database and log file names. */ memcpy(pFS->zDb, zDb, nDb+1); memcpy(pFS->zLog, zDb, nDb); @@ -929,14 +929,11 @@ lsmFree(pEnv, pFS->aIBuffer); lsmFree(pEnv, pFS->aOBuffer); pFS->nBuffer = 0; /* Unmap the file, if it is currently mapped */ - if( pFS->pMap ){ - lsmEnvRemap(pEnv, pFS->fdDb, -1, &pFS->pMap, &pFS->nMap); - pFS->bUseMmap = 0; - } + fsMmapClose(pFS); /* Free all allocate page structures */ pPg = pFS->pLruFirst; while( pPg ){ Page *pNext = pPg->pLruNext; @@ -952,14 +949,14 @@ pFS->pFree = 0; /* Configure the FileSystem object */ if( db->compress.xCompress ){ pFS->pCompress = &db->compress; - pFS->bUseMmap = 0; + pFS->mmapmgr.eUseMmap = LSM_MMAP_OFF; }else{ pFS->pCompress = 0; - pFS->bUseMmap = db->bMmap; + pFS->mmapmgr.eUseMmap = db->eMmap; } } return LSM_OK; } Index: src/lsm_main.c ================================================================== --- src/lsm_main.c +++ src/lsm_main.c @@ -327,12 +327,12 @@ break; } case LSM_CONFIG_MMAP: { int *piVal = va_arg(ap, int *); - if( pDb->iReader<0 && *piVal>=0 && *piVal<=1 ){ - pDb->bMmap = *piVal; + if( pDb->iReader<0 && *piVal>=0 && *piVal<=2 ){ + pDb->eMmap = *piVal; rc = lsmFsConfigure(pDb); } *piVal = pDb->eMmap; break; } Index: src/lsm_sorted.c ================================================================== --- src/lsm_sorted.c +++ src/lsm_sorted.c @@ -702,12 +702,12 @@ pCsr->aPg[pCsr->iPg].iCell++; iLoad = btreeCursorPtr(aData, nData, pPg->iCell); do { Page *pLoad; - pCsr->iPg++; rc = lsmFsDbPageGet(pCsr->pFS, pCsr->pSeg, iLoad, &pLoad); + pCsr->iPg++; pCsr->aPg[pCsr->iPg].pPage = pLoad; pCsr->aPg[pCsr->iPg].iCell = 0; if( rc==LSM_OK ){ if( pCsr->iPg==(pCsr->nDepth-1) ) break; aData = fsPageData(pLoad, &nData);