-C Merge\slatest\strunk\schanges\sinto\sthis\sbranch.
-D 2017-09-22T10:49:03.297
+C Cherrypick\s[ec37ad6d08]\sinto\sthis\sbranch.\sWith\sthis\spatch,\sif\nSQLITE_SHARED_MAPPING\sis\sdefined\sat\sbuild-time\sSQLite\swill\suse\sa\ssingle\smemory\nmapping\sfor\smultiple\sconnections\sto\sthe\ssame\sdatabase\sfile\swithin\sa\ssingle\nprocess.
+D 2017-09-22T11:09:09.656
F Makefile.in 4bc36d913c2e3e2d326d588d72f618ac9788b2fd4b7efda61102611a6495c3ff
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 6033b51b6aea702ea059f6ab2d47b1d3cef648695f787247dd4fb395fe60673f
F src/os.h 8e976e59eb4ca1c0fca6d35ee803e38951cb0343
F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
-F src/os_unix.c 3984fc069df59e26f000e30609611cecdb4e93293e6ee52313a473a7e874af1b
+F src/os_unix.c 1b2203f30ec4ecef66b0f9b714432edaffe0f89f189af7c6b1db3e2cb3a52d24
F src/os_win.c 5c802f05e706c87c6e4cc6e9527f3364c7a7178458f93dffa5e19ac2e8eef9c1
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c 84e90e0acee15766840f89b8be6f14322de16396d9229c494fec6c1cc03a69cf
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P d53108e76307fb24ef1d8f75fe82c180f5588ad8e65eeceace92f4cecadfa452 0a12915b373cd0491a58d8f7a645711c620c70efced623e6b40aa01f23284157
-R 5b090dbbf85dc5792098185268ac7c8f
+P 307b802e8627c93a51e4c54851a4fab33db5061bb80e3d327ce53b127d6d511b
+Q +ec37ad6d08362f4c9faad9b629c0fa23f5864ff6ad7f4cbed93a25d5f7b815d8
+R a7069c27bdffb405c8574ad991612563
U dan
-Z 51723e9e7fe6c543a37219e2d01ad740
+Z 9a1235c2d010c6dd3774c97b07deb6f2
sem_t *pSem; /* Named POSIX semaphore */
char aSemName[MAX_PATHNAME+2]; /* Name of that semaphore */
#endif
+#ifdef SQLITE_SHARED_MAPPING
+ sqlite3_int64 nSharedMapping; /* Size of mapped region in bytes */
+ void *pSharedMapping; /* Memory mapped region */
+#endif
};
/*
pInode->nRef--;
if( pInode->nRef==0 ){
assert( pInode->pShmNode==0 );
+#ifdef SQLITE_SHARED_MAPPING
+ if( pInode->pSharedMapping ){
+ osMunmap(pInode->pSharedMapping, pInode->nSharedMapping);
+ pInode->pSharedMapping = 0;
+ pInode->nSharedMapping = 0;
+ }
+#endif
closePendingFds(pFile);
if( pInode->pPrev ){
assert( pInode->pPrev->pNext==pInode );
** Close the file.
*/
static int nolockClose(sqlite3_file *id) {
+#ifdef SQLITE_SHARED_MAPPING
+ unixFile *pFd = (unixFile*)id;
+ if( pFd->pInode ){
+ unixEnterMutex();
+ releaseInodeInfo(pFd);
+ unixLeaveMutex();
+ }
+#endif
return closeUnixFile(id);
}
*(i64*)pArg = pFile->mmapSizeMax;
if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){
pFile->mmapSizeMax = newLimit;
+#ifdef SQLITE_SHARED_MAPPING
+ if( pFile->pInode==0 )
+#endif
if( pFile->mmapSize>0 ){
unixUnmapfile(pFile);
rc = unixMapfile(pFile, -1);
*/
static void unixUnmapfile(unixFile *pFd){
assert( pFd->nFetchOut==0 );
+#ifdef SQLITE_SHARED_MAPPING
+ if( pFd->pInode ) return;
+#endif
if( pFd->pMapRegion ){
osMunmap(pFd->pMapRegion, pFd->mmapSizeActual);
pFd->pMapRegion = 0;
nMap = pFd->mmapSizeMax;
}
+#ifdef SQLITE_SHARED_MAPPING
+ if( pFd->pInode ){
+ unixInodeInfo *pInode = pFd->pInode;
+ if( pFd->pMapRegion ) return SQLITE_OK;
+ unixEnterMutex();
+ if( pInode->pSharedMapping==0 ){
+ u8 *pNew = osMmap(0, nMap, PROT_READ, MAP_SHARED, pFd->h, 0);
+ if( pNew==MAP_FAILED ){
+ unixLogError(SQLITE_OK, "mmap", pFd->zPath);
+ pFd->mmapSizeMax = 0;
+ }else{
+ pInode->pSharedMapping = pNew;
+ pInode->nSharedMapping = nMap;
+ }
+ }
+ pFd->pMapRegion = pInode->pSharedMapping;
+ pFd->mmapSizeActual = pFd->mmapSize = pInode->nSharedMapping;
+ unixLeaveMutex();
+ return SQLITE_OK;
+ }
+#endif
+
assert( nMap>0 || (pFd->mmapSize==0 && pFd->pMapRegion==0) );
if( nMap!=pFd->mmapSize ){
unixRemapfile(pFd, nMap);
if( pLockingStyle == &posixIoMethods
#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
|| pLockingStyle == &nfsIoMethods
+#endif
+#ifdef SQLITE_SHARED_MAPPING
+ || pLockingStyle == &nolockIoMethods
#endif
){
unixEnterMutex();