mirror of https://github.com/sqlite/sqlite
Mark the shared-memory in the WAL implementation as volatile.
FossilOrigin-Name: 0a6787908e989bd5e6af25acbdc59ebc8fa61d6d
This commit is contained in:
parent
e730fec883
commit
5939f44375
34
manifest
34
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-----
|
||||
|
|
|
@ -1 +1 @@
|
|||
a029be10172e2e6a2ef4e3eb2ea1bd0ca85b16ed
|
||||
0a6787908e989bd5e6af25acbdc59ebc8fa61d6d
|
2
src/os.c
2
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){
|
||||
|
|
2
src/os.h
2
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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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){
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
38
src/wal.c
38
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue