diff --git a/manifest b/manifest index 6d9beedcb0..6990ed0859 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Comment\sclarifications\sin\swal.c. -D 2010-05-18T12:56:50 +C Mark\sthe\sshared-memory\sin\sthe\sWAL\simplementation\sas\svolatile. +D 2010-05-18T13:27:13 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -151,11 +151,11 @@ F src/mutex_os2.c 20477db50cf3817c2f1cd3eb61e5c177e50231db F src/mutex_unix.c becb8c4e07616abf84650d3687d62a1461d5d9cd F src/mutex_w32.c fb1cf87c5a88b56c7df0d9ddb796ed9641046c3d F src/notify.c cbfa66a836da3a51567209636e6a94059c137930 -F src/os.c c0a5dfce2a214dacb679425632d04f8a2021f364 -F src/os.h 8a7e2456237ecf3a2e55b02f9fe6091f1ad36902 +F src/os.c b994b2f4c9a2c406a20d43b59c22ed39a1e704d1 +F src/os.h 207c26793c9b518aa670480a3a262250dd3c98b1 F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f F src/os_os2.c 665876d5eec7585226b0a1cf5e18098de2b2da19 -F src/os_unix.c 28caddcd74e6f0ded69476de5cf3f3b670ed840a +F src/os_unix.c 6db3289dcfe8f2ec0277ad025e072254252a00c9 F src/os_win.c 70c4a3327716213b59adf3a8adf2d5318b044a19 F src/pager.c 1e163a82ae8405433dca559831caa06aafbba3b0 F src/pager.h 76466c3a5af56943537f68b1f16567101a0cd1d0 @@ -171,7 +171,7 @@ F src/resolve.c ac5f1a713cd1ae77f08b83cc69581e11bf5ae6f9 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c c03d8a0565febcde8c6a12c5d77d065fddae889b F src/shell.c fd4ccdb37c3b68de0623eb938a649e0990710714 -F src/sqlite.h.in 14aa9773a255f1dca579218f0981806a3c1b479c +F src/sqlite.h.in aa9086ea3a365843d62ce120cba458ecad6edd63 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqliteInt.h c1ca9bed7c963343f90edaf0ec31b8ff4b43fb01 F src/sqliteLimit.h 196e2f83c3b444c4548fc1874f52f84fdbda40f3 @@ -183,7 +183,7 @@ F src/test2.c 31f1b9d076b4774a22d2605d0af1f34e14a9a7bd F src/test3.c 4c21700c73a890a47fc685c1097bfb661346ac94 F src/test4.c ad03bb987ddedce928f4258c1e7fa4109a73497d F src/test5.c cc55900118fa4add8ec9cf69fc4225a4662f76b1 -F src/test6.c d00c3930e2d22a9dc84415b1a2ead2ca4ab430ae +F src/test6.c 21f6ec70b5142c37846364e7da0580f7a05b0fc0 F src/test7.c 3f2d63e4ccf97f8c2cf1a7fa0a3c8e2e2a354e6e F src/test8.c f959db9a22d882013b64c92753fa793b2ce3bdea F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60 @@ -193,7 +193,7 @@ F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2 F src/test_config.c 6210f501d358bde619ae761f06f123529c6ba24f F src/test_demovfs.c da81a5f7785bb352bda7911c332a983ec4f17f27 -F src/test_devsym.c 136869028132c3dc34fe920a9fda716f391227f4 +F src/test_devsym.c 2c5221c047183e081da523bae16ae5d792c4caaf F src/test_func.c 13b582345fb1185a93e46c53310fae8547dcce20 F src/test_hexio.c 1237f000ec7a491009b1233f5c626ea71bce1ea2 F src/test_init.c 5d624ffd0409d424cf9adbfe1f056b200270077c @@ -204,13 +204,13 @@ F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e F src/test_malloc.c 2842c922b8e8d992aba722214952204ca025b411 F src/test_mutex.c ce06b59aca168cd8c520b77159a24352a7469bd3 F src/test_onefile.c df4d7858b5cd1dffe92d36ec9dbad11f0037ffd1 -F src/test_osinst.c f7f8e69ea2e3ae35d12504d4a217d4428877d10c +F src/test_osinst.c 33207e761effffc31a867f9d4a8bb1f52fe6ee92 F src/test_pcache.c 7bf828972ac0d2403f5cfa4cd14da41f8ebe73d8 F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0 F src/test_server.c bbba05c144b5fc4b52ff650a4328027b3fa5fcc6 F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa F src/test_thread.c aa9919c885a1fe53eafc73492f0898ee6c0a0726 -F src/test_vfs.c 3601f9b6d46cb6daf0697d60c76bf8e18b90b123 +F src/test_vfs.c 7fc397aa5a52e2bf64fa0b46f3b9f40767150289 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/tokenize.c 25ceb0f0a746ea1d0f9553787f3f0a56853cfaeb F src/trigger.c 8927588cb9e6d47f933b53bfe74200fbb504100d @@ -227,7 +227,7 @@ F src/vdbeblob.c 5327132a42a91e8b7acfb60b9d2c3b1c5c863e0e F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1 F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2 F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda -F src/wal.c 5bdd0270bd6eedf019df41ead35353d5b346cb66 +F src/wal.c 03c150ff23332a58dd0cf313c7b7defdd9ec6275 F src/wal.h 434f76f51225bb614e43ccb6bd2341541ba6a06e F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356 @@ -816,14 +816,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 7162c45673d1068d1fda55a70207a3cd77575502 -R a078a222bb7d32b26fd0000547f355b7 +P a029be10172e2e6a2ef4e3eb2ea1bd0ca85b16ed +R c3edbc896fce7d9f6c83f7337ac02298 U drh -Z cf716cae7bdeb338c84b4a59498f0eb8 +Z 88ded0b14b6354cb7517528585f793ca -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFL8o6WoxKgR168RlERAjcxAJ0bDrt/4Xf5RaRzO3o43bqrLgiBdQCggLtQ -OfJWkWn8VUJrOX/ADyfjINI= -=kAai +iD8DBQFL8pW0oxKgR168RlERAoCBAJ9VXFufUgFrlJ8vv69PNeEYGWy/IgCcD99s +/C+oicnjvVyzr2OBGGMkk9c= +=CSoB -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index c7ca18c947..e0d553b0af 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a029be10172e2e6a2ef4e3eb2ea1bd0ca85b16ed \ No newline at end of file +0a6787908e989bd5e6af25acbdc59ebc8fa61d6d \ No newline at end of file diff --git a/src/os.c b/src/os.c index 9ad13690ce..44848fdbb8 100644 --- a/src/os.c +++ b/src/os.c @@ -104,7 +104,7 @@ int sqlite3OsShmOpen(sqlite3_file *id){ int sqlite3OsShmSize(sqlite3_file *id, int reqSize, int *pNewSize){ return id->pMethods->xShmSize(id, reqSize, pNewSize); } -int sqlite3OsShmGet(sqlite3_file *id, int reqSize, int *pSize, void **pp){ +int sqlite3OsShmGet(sqlite3_file *id,int reqSize,int *pSize,void volatile **pp){ return id->pMethods->xShmGet(id, reqSize, pSize, pp); } int sqlite3OsShmRelease(sqlite3_file *id){ diff --git a/src/os.h b/src/os.h index cf7f2b7d7a..8a08acc721 100644 --- a/src/os.h +++ b/src/os.h @@ -245,7 +245,7 @@ int sqlite3OsSectorSize(sqlite3_file *id); int sqlite3OsDeviceCharacteristics(sqlite3_file *id); int sqlite3OsShmOpen(sqlite3_file *id); int sqlite3OsShmSize(sqlite3_file *id, int, int*); -int sqlite3OsShmGet(sqlite3_file *id, int, int*, void**); +int sqlite3OsShmGet(sqlite3_file *id, int, int*, void volatile**); int sqlite3OsShmRelease(sqlite3_file *id); int sqlite3OsShmLock(sqlite3_file *id, int, int*); int sqlite3OsShmClose(sqlite3_file *id, int); diff --git a/src/os_unix.c b/src/os_unix.c index 420623824b..928ee63554 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3675,7 +3675,7 @@ static int unixShmGet( sqlite3_file *fd, /* Database file holding shared memory */ int reqMapSize, /* Requested size of mapping. -1 means don't care */ int *pNewMapSize, /* Write new size of mapping here */ - void **ppBuf /* Write mapping buffer origin here */ + void volatile **ppBuf /* Write mapping buffer origin here */ ){ unixFile *pDbFd = (unixFile*)fd; unixShm *p = pDbFd->pShm; diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 66ab68b30d..8676aeaa73 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -656,7 +656,7 @@ struct sqlite3_io_methods { /* Methods above are valid for version 1 */ int (*xShmOpen)(sqlite3_file*); int (*xShmSize)(sqlite3_file*, int reqSize, int *pNewSize); - int (*xShmGet)(sqlite3_file*, int reqSize, int *pSize, void**); + int (*xShmGet)(sqlite3_file*, int reqSize, int *pSize, void volatile**); int (*xShmRelease)(sqlite3_file*); int (*xShmLock)(sqlite3_file*, int desiredLock, int *gotLock); int (*xShmClose)(sqlite3_file*, int deleteFlag); diff --git a/src/test6.c b/src/test6.c index 9b5c3f615e..98db74aabb 100644 --- a/src/test6.c +++ b/src/test6.c @@ -529,7 +529,12 @@ static int cfShmOpen(sqlite3_file *pFile){ static int cfShmSize(sqlite3_file *pFile, int reqSize, int *pNew){ return sqlite3OsShmSize(((CrashFile*)pFile)->pRealFile, reqSize, pNew); } -static int cfShmGet(sqlite3_file *pFile, int reqSize, int *pSize, void **pp){ +static int cfShmGet( + sqlite3_file *pFile, + int reqSize, + int *pSize, + void volatile **pp +){ return sqlite3OsShmGet(((CrashFile*)pFile)->pRealFile, reqSize, pSize, pp); } static int cfShmRelease(sqlite3_file *pFile){ diff --git a/src/test_devsym.c b/src/test_devsym.c index 0a60b3c94d..3dab67abe9 100644 --- a/src/test_devsym.c +++ b/src/test_devsym.c @@ -52,7 +52,7 @@ static int devsymSectorSize(sqlite3_file*); static int devsymDeviceCharacteristics(sqlite3_file*); static int devsymShmOpen(sqlite3_file*); static int devsymShmSize(sqlite3_file*,int,int*); -static int devsymShmGet(sqlite3_file*,int,int*,void**); +static int devsymShmGet(sqlite3_file*,int,int*,volatile void**); static int devsymShmRelease(sqlite3_file*); static int devsymShmLock(sqlite3_file*,int,int*); static int devsymShmClose(sqlite3_file*,int); @@ -248,7 +248,12 @@ static int devsymShmSize(sqlite3_file *pFile, int reqSize, int *pSize){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsShmSize(p->pReal, reqSize, pSize); } -static int devsymShmGet(sqlite3_file *pFile, int reqSz, int *pSize, void **pp){ +static int devsymShmGet( + sqlite3_file *pFile, + int reqSz, + int *pSize, + void volatile **pp +){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsShmGet(p->pReal, reqSz, pSize, pp); } diff --git a/src/test_osinst.c b/src/test_osinst.c index c75e0cf8cb..0c8d311e38 100644 --- a/src/test_osinst.c +++ b/src/test_osinst.c @@ -147,7 +147,7 @@ static int vfslogDeviceCharacteristics(sqlite3_file*); static int vfslogShmOpen(sqlite3_file *pFile); static int vfslogShmSize(sqlite3_file *pFile, int reqSize, int *pNewSize); -static int vfslogShmGet(sqlite3_file *pFile, int req, int *pSize, void **pp); +static int vfslogShmGet(sqlite3_file *pFile, int,int*,volatile void **); static int vfslogShmRelease(sqlite3_file *pFile); static int vfslogShmLock(sqlite3_file *pFile, int desiredLock, int *gotLock); static int vfslogShmClose(sqlite3_file *pFile, int deleteFlag); @@ -420,7 +420,12 @@ static int vfslogShmSize(sqlite3_file *pFile, int reqSize, int *pNewSize){ vfslog_call(p->pVfslog, OS_SHMSIZE, p->iFileId, t, rc, 0, 0); return rc; } -static int vfslogShmGet(sqlite3_file *pFile, int req, int *pSize, void **pp){ +static int vfslogShmGet( + sqlite3_file *pFile, + int req, + int *pSize, + volatile void **pp +){ int rc; sqlite3_uint64 t; VfslogFile *p = (VfslogFile *)pFile; @@ -1193,4 +1198,3 @@ int SqlitetestOsinst_Init(Tcl_Interp *interp){ } #endif /* SQLITE_TEST */ - diff --git a/src/test_vfs.c b/src/test_vfs.c index ce4afa7622..f4dec59511 100644 --- a/src/test_vfs.c +++ b/src/test_vfs.c @@ -100,7 +100,7 @@ static int tvfsCurrentTime(sqlite3_vfs*, double*); static int tvfsShmOpen(sqlite3_file*); static int tvfsShmSize(sqlite3_file*, int , int *); -static int tvfsShmGet(sqlite3_file*, int , int *, void **); +static int tvfsShmGet(sqlite3_file*, int , int *, volatile void **); static int tvfsShmRelease(sqlite3_file*); static int tvfsShmLock(sqlite3_file*, int , int *); static int tvfsShmClose(sqlite3_file*, int); @@ -509,7 +509,7 @@ static int tvfsShmGet( sqlite3_file *pFile, int reqMapSize, int *pMapSize, - void **pp + volatile void **pp ){ int rc = SQLITE_OK; TestvfsFile *pFd = (TestvfsFile *)pFile; diff --git a/src/wal.c b/src/wal.c index bf82c2848f..f925bae4cc 100644 --- a/src/wal.c +++ b/src/wal.c @@ -123,7 +123,7 @@ struct Wal { sqlite3_file *pWalFd; /* File handle for WAL file */ u32 iCallback; /* Value to pass to log callback (or 0) */ int szWIndex; /* Size of the wal-index that is mapped in mem */ - u32 *pWiData; /* Pointer to wal-index content in memory */ + volatile u32 *pWiData; /* Pointer to wal-index content in memory */ u8 lockState; /* SQLITE_SHM_xxxx constant showing lock state */ u8 readerType; /* SQLITE_SHM_READ or SQLITE_SHM_READ_FULL */ u8 exclusiveMode; /* Non-zero if connection is in exclusive mode */ @@ -232,14 +232,14 @@ static int walSetLock(Wal *pWal, int desiredStatus){ ** Update the header of the wal-index file. */ static void walIndexWriteHdr(Wal *pWal, WalIndexHdr *pHdr){ - u32 *aHdr = pWal->pWiData; /* Write header here */ - u32 *aCksum = &aHdr[WALINDEX_HDR_NFIELD]; /* Write header cksum here */ + volatile u32 *aHdr = pWal->pWiData; /* Write header here */ + volatile u32 *aCksum = &aHdr[WALINDEX_HDR_NFIELD]; /* Write cksum here */ assert( WALINDEX_HDR_NFIELD==sizeof(WalIndexHdr)/4 ); assert( aHdr!=0 ); - memcpy(aHdr, pHdr, sizeof(WalIndexHdr)); + memcpy((void*)aHdr, pHdr, sizeof(WalIndexHdr)); aCksum[0] = aCksum[1] = 1; - walChecksumBytes((u8 *)aHdr, sizeof(WalIndexHdr), aCksum); + walChecksumBytes((u8*)aHdr, sizeof(WalIndexHdr), (u32*)aCksum); } /* @@ -415,7 +415,7 @@ static int walIndexMap(Wal *pWal, int reqSize){ if( pWal->pWiData==0 || reqSize>pWal->szWIndex ){ walIndexUnmap(pWal); rc = sqlite3OsShmGet(pWal->pDbFd, reqSize, &pWal->szWIndex, - (void**)(char*)&pWal->pWiData); + (void volatile**)(char volatile*)&pWal->pWiData); if( rc==SQLITE_OK && pWal->pWiData==0 ){ /* Make sure pWal->pWiData is not NULL while we are holding the ** lock on the mapping. */ @@ -474,13 +474,13 @@ static int walHashKey(u32 iPage){ static void walHashFind( Wal *pWal, /* WAL handle */ u32 iFrame, /* Find the hash table indexing this frame */ - HASHTABLE_DATATYPE **paHash, /* OUT: Pointer to hash index */ - u32 **paPgno, /* OUT: Pointer to page number array */ + volatile HASHTABLE_DATATYPE **paHash, /* OUT: Pointer to hash index */ + volatile u32 **paPgno, /* OUT: Pointer to page number array */ u32 *piZero /* OUT: Frame associated with *paPgno[0] */ ){ u32 iZero; - u32 *aPgno; - HASHTABLE_DATATYPE *aHash; + volatile u32 *aPgno; + volatile HASHTABLE_DATATYPE *aHash; iZero = ((iFrame-1)/HASHTABLE_NPAGE) * HASHTABLE_NPAGE; aPgno = &pWal->pWiData[walIndexEntry(iZero+1)-iZero-1]; @@ -529,13 +529,13 @@ static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){ if( rc==SQLITE_OK ){ int iKey; /* Hash table key */ u32 iZero; /* One less than frame number of aPgno[1] */ - u32 *aPgno; /* Page number array */ - HASHTABLE_DATATYPE *aHash; /* Hash table */ - int idx; /* Value to write to hash-table slot */ + volatile u32 *aPgno; /* Page number array */ + volatile HASHTABLE_DATATYPE *aHash; /* Hash table */ + int idx; /* Value to write to hash-table slot */ walHashFind(pWal, iFrame, &aHash, &aPgno, &iZero); idx = iFrame - iZero; - if( idx==1 ) memset(aHash, 0, HASHTABLE_NBYTE); + if( idx==1 ) memset((void*)aHash, 0, HASHTABLE_NBYTE); aPgno[iFrame] = iPage; for(iKey=walHashKey(iPage); aHash[iKey]; iKey=(iKey+1)%HASHTABLE_NSLOT); aHash[iKey] = idx; @@ -760,7 +760,7 @@ static int walIteratorInit(Wal *pWal, WalIterator **pp){ if( rc!=SQLITE_OK ){ return rc; } - aData = pWal->pWiData; + aData = (u32*)pWal->pWiData; iLast = pWal->hdr.iLastPg; nSegment = (iLast >> 8) + 1; nFinal = (iLast & 0x000000FF); @@ -951,7 +951,7 @@ int walIndexTryHdr(Wal *pWal, int *pChanged){ ** file, meaning it is possible that an inconsistent snapshot is read ** from the file. If this happens, return non-zero. */ - memcpy(aHdr, pWal->pWiData, sizeof(aHdr)); + memcpy(aHdr, (void*)pWal->pWiData, sizeof(aHdr)); walChecksumBytes((u8*)aHdr, sizeof(u32)*WALINDEX_HDR_NFIELD, aCksum); if( aCksum[0]!=aHdr[WALINDEX_HDR_NFIELD] || aCksum[1]!=aHdr[WALINDEX_HDR_NFIELD+1] @@ -1148,8 +1148,8 @@ int sqlite3WalRead( ** can occur. But if it does, it should not cause any problems. */ for(iHash=iLast; iHash>0 && iRead==0; iHash-=HASHTABLE_NPAGE){ - HASHTABLE_DATATYPE *aHash; /* Pointer to hash table */ - u32 *aPgno; /* Pointer to array of page numbers */ + volatile HASHTABLE_DATATYPE *aHash; /* Pointer to hash table */ + volatile u32 *aPgno; /* Pointer to array of page numbers */ u32 iZero; /* Frame number corresponding to aPgno[0] */ int iKey; /* Hash slot index */ @@ -1222,7 +1222,7 @@ int sqlite3WalWriteLock(Wal *pWal, int op){ if( rc==SQLITE_OK ){ rc = walIndexMap(pWal, sizeof(WalIndexHdr)); if( rc==SQLITE_OK - && memcmp(&pWal->hdr, pWal->pWiData, sizeof(WalIndexHdr)) + && memcmp(&pWal->hdr, (void*)pWal->pWiData, sizeof(WalIndexHdr)) ){ rc = SQLITE_BUSY; }