Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In lsm, attempt to unmap the database file before truncating it when disconnecting. A mapped file may not be truncated on win32. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
39069941e98605bc8c7c736819781761 |
User & Date: | dan 2017-07-11 20:36:35.268 |
Context
2017-07-12
| ||
12:19 | Compile cleanly with SQLITE_OMIT_UTF16. (check-in: 783100b801 user: drh tags: trunk) | |
2017-07-11
| ||
20:36 | In lsm, attempt to unmap the database file before truncating it when disconnecting. A mapped file may not be truncated on win32. (check-in: 39069941e9 user: dan tags: trunk) | |
19:55 | Simplify the way in which the database file is truncated when the last connection disconnects. Also ignore the error code from the xTruncate call - as truncating a database file is always optional. (check-in: b0a49d90fc user: dan tags: trunk) | |
Changes
Changes to ext/lsm1/lsmInt.h.
︙ | ︙ | |||
691 692 693 694 695 696 697 698 699 700 701 702 703 704 | /************************************************************************** ** Start of functions from "lsm_file.c". */ int lsmFsOpen(lsm_db *, const char *, int); int lsmFsOpenLog(lsm_db *, int *); void lsmFsCloseLog(lsm_db *); void lsmFsClose(FileSystem *); int lsmFsConfigure(lsm_db *db); int lsmFsBlockSize(FileSystem *); void lsmFsSetBlockSize(FileSystem *, int); int lsmFsMoveBlock(FileSystem *pFS, Segment *pSeg, int iTo, int iFrom); | > > | 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 | /************************************************************************** ** Start of functions from "lsm_file.c". */ int lsmFsOpen(lsm_db *, const char *, int); int lsmFsOpenLog(lsm_db *, int *); void lsmFsCloseLog(lsm_db *); void lsmFsClose(FileSystem *); int lsmFsUnmap(FileSystem *); int lsmFsConfigure(lsm_db *db); int lsmFsBlockSize(FileSystem *); void lsmFsSetBlockSize(FileSystem *, int); int lsmFsMoveBlock(FileSystem *pFS, Segment *pSeg, int iTo, int iFrom); |
︙ | ︙ |
Changes to ext/lsm1/lsm_file.c.
︙ | ︙ | |||
1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 | pFix->aData += iOff; } lsmSortedRemap(pFS->pDb); } *pRc = rc; } } /* ** fsync() the database file. */ int lsmFsSyncDb(FileSystem *pFS, int nBlock){ return lsmEnvSync(pFS->pEnv, pFS->fdDb); } | > > > > > > > > > > > | 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 | pFix->aData += iOff; } lsmSortedRemap(pFS->pDb); } *pRc = rc; } } /* ** If it is mapped, unmap the database file. */ int lsmFsUnmap(FileSystem *pFS){ int rc = LSM_OK; if( pFS ){ rc = lsmEnvRemap(pFS->pEnv, pFS->fdDb, -1, &pFS->pMap, &pFS->nMap); } return rc; } /* ** fsync() the database file. */ int lsmFsSyncDb(FileSystem *pFS, int nBlock){ return lsmEnvSync(pFS->pEnv, pFS->fdDb); } |
︙ | ︙ |
Changes to ext/lsm1/lsm_shared.c.
︙ | ︙ | |||
308 309 310 311 312 313 314 315 316 317 318 319 320 321 | if( rc==LSM_OK && bRotrans==0 ){ lsmFsCloseAndDeleteLog(pDb->pFS); } /* The database may only be truncated if there exist no read-only ** clients - either connected or running rotrans transactions. */ if( bReadonly==0 && bRotrans==0 ){ dbTruncateFile(pDb); if( p->pFile && p->bMultiProc ){ lsmEnvShmUnmap(pDb->pEnv, p->pFile, 1); } } } } | > | 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | if( rc==LSM_OK && bRotrans==0 ){ lsmFsCloseAndDeleteLog(pDb->pFS); } /* The database may only be truncated if there exist no read-only ** clients - either connected or running rotrans transactions. */ if( bReadonly==0 && bRotrans==0 ){ lsmFsUnmap(pDb->pFS); dbTruncateFile(pDb); if( p->pFile && p->bMultiProc ){ lsmEnvShmUnmap(pDb->pEnv, p->pFile, 1); } } } } |
︙ | ︙ | |||
564 565 566 567 568 569 570 571 572 573 574 575 576 577 | if( p ){ lsm_db **ppDb; if( pDb->pShmhdr ){ doDbDisconnect(pDb); } lsmMutexEnter(pDb->pEnv, p->pClientMutex); for(ppDb=&p->pConn; *ppDb!=pDb; ppDb=&((*ppDb)->pNext)); *ppDb = pDb->pNext; dbDeferClose(pDb); lsmMutexLeave(pDb->pEnv, p->pClientMutex); enterGlobalMutex(pDb->pEnv); | > | 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 | if( p ){ lsm_db **ppDb; if( pDb->pShmhdr ){ doDbDisconnect(pDb); } lsmFsUnmap(pDb->pFS); lsmMutexEnter(pDb->pEnv, p->pClientMutex); for(ppDb=&p->pConn; *ppDb!=pDb; ppDb=&((*ppDb)->pNext)); *ppDb = pDb->pNext; dbDeferClose(pDb); lsmMutexLeave(pDb->pEnv, p->pClientMutex); enterGlobalMutex(pDb->pEnv); |
︙ | ︙ |