mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
In wal.c: improved comments, new assert() and testcase() macros, and
replace some magic numbers with appropriate symbolic constants. FossilOrigin-Name: 13ec8a77a47aa471af587459f4094da0d06674c5960f0d34777bcb3d38bc413b
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Further\scomment\simprovements\sin\swal.c.\s\sNo\scode\schanges.
|
C In\swal.c:\simproved\scomments,\snew\sassert()\sand\stestcase()\smacros,\sand\nreplace\ssome\smagic\snumbers\swith\sappropriate\ssymbolic\sconstants.
|
||||||
D 2017-11-11T13:30:44.595
|
D 2017-11-11T20:11:01.646
|
||||||
F Makefile.in 5bae3f2f3d42f2ad52b141562d74872c97ac0fca6c54953c91bb150a0e6427a8
|
F Makefile.in 5bae3f2f3d42f2ad52b141562d74872c97ac0fca6c54953c91bb150a0e6427a8
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 3a5cb477ec3ce5274663b693164e349db63348667cd45bad78cc13d580b691e2
|
F Makefile.msc 3a5cb477ec3ce5274663b693164e349db63348667cd45bad78cc13d580b691e2
|
||||||
@@ -543,7 +543,7 @@ F src/vdbesort.c 731a09e5cb9e96b70c394c1b7cf3860fbe84acca7682e178615eb941a3a0ef2
|
|||||||
F src/vdbetrace.c 48e11ebe040c6b41d146abed2602e3d00d621d7ebe4eb29b0a0f1617fd3c2f6c
|
F src/vdbetrace.c 48e11ebe040c6b41d146abed2602e3d00d621d7ebe4eb29b0a0f1617fd3c2f6c
|
||||||
F src/vtab.c 0e4885495172e1bdf54b12cce23b395ac74ef5729031f15e1bc1e3e6b360ed1a
|
F src/vtab.c 0e4885495172e1bdf54b12cce23b395ac74ef5729031f15e1bc1e3e6b360ed1a
|
||||||
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
||||||
F src/wal.c 0e19d4fbb52085697509f9407176e732d440f372f49ca08510a65d1aa976bd07
|
F src/wal.c 213ddce034c354e640294e77b28097db2a7e10e16c12f6a1158bd7fbcc8e730c
|
||||||
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
||||||
F src/walker.c d591e8a9ccf60abb010966b354fcea4aa08eba4d83675c2b281a8764c76cc22f
|
F src/walker.c d591e8a9ccf60abb010966b354fcea4aa08eba4d83675c2b281a8764c76cc22f
|
||||||
F src/where.c b7a075f5fb3d912a891dcc3257f538372bb4a1622dd8ca7d752ad95ce8949ba4
|
F src/where.c b7a075f5fb3d912a891dcc3257f538372bb4a1622dd8ca7d752ad95ce8949ba4
|
||||||
@@ -1669,7 +1669,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P d3c25740eec9a2a41c29e6e488fcf6587c1fb821147a442c29439b25a92154a5
|
P 346388007de585083dc67ad865b91db7c7d7b78c10a06f8bb7c48767c326c47e
|
||||||
R cc050d490699d35569ec56a8515bac08
|
R cc8d47b78b14e89aa0bda73b44dcaa29
|
||||||
U drh
|
U drh
|
||||||
Z 1e870a391397f9beedb8e100937bac44
|
Z f012da86d6540243e580ab3866be51e7
|
||||||
|
@@ -1 +1 @@
|
|||||||
346388007de585083dc67ad865b91db7c7d7b78c10a06f8bb7c48767c326c47e
|
13ec8a77a47aa471af587459f4094da0d06674c5960f0d34777bcb3d38bc413b
|
33
src/wal.c
33
src/wal.c
@@ -545,6 +545,11 @@ struct WalIterator {
|
|||||||
** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
|
** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
|
||||||
** numbered from zero.
|
** numbered from zero.
|
||||||
**
|
**
|
||||||
|
** If the wal-index is currently smaller the iPage pages then the size
|
||||||
|
** of the wal-index might be increased, but only if it is safe to do
|
||||||
|
** so. It is safe to enlarge the wal-index if pWal->writeLock is true
|
||||||
|
** or pWal->exclusiveMode==WAL_HEAPMEMORY_MODE.
|
||||||
|
**
|
||||||
** If this call is successful, *ppPage is set to point to the wal-index
|
** If this call is successful, *ppPage is set to point to the wal-index
|
||||||
** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
|
** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
|
||||||
** then an SQLite error code is returned and *ppPage is set to 0.
|
** then an SQLite error code is returned and *ppPage is set to 0.
|
||||||
@@ -576,6 +581,8 @@ static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
|
|||||||
rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ,
|
rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ,
|
||||||
pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
|
pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
|
||||||
);
|
);
|
||||||
|
assert( pWal->apWiData[iPage]!=0 || rc!=SQLITE_OK || pWal->writeLock==0 );
|
||||||
|
testcase( pWal->apWiData[iPage]==0 && rc==SQLITE_OK );
|
||||||
if( (rc&0xff)==SQLITE_READONLY ){
|
if( (rc&0xff)==SQLITE_READONLY ){
|
||||||
pWal->readOnly |= WAL_SHM_RDONLY;
|
pWal->readOnly |= WAL_SHM_RDONLY;
|
||||||
if( rc==SQLITE_READONLY ){
|
if( rc==SQLITE_READONLY ){
|
||||||
@@ -2108,15 +2115,21 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
|
|||||||
** open, and hence the content of the shared-memory is unreliable,
|
** open, and hence the content of the shared-memory is unreliable,
|
||||||
** since the shared-memory might be inconsistent with the WAL file
|
** since the shared-memory might be inconsistent with the WAL file
|
||||||
** and there is no writer on hand to fix it. */
|
** and there is no writer on hand to fix it. */
|
||||||
assert( page0==0 && pWal->writeLock==0 );
|
assert( page0==0 );
|
||||||
|
assert( pWal->writeLock==0 );
|
||||||
|
assert( pWal->readOnly & WAL_SHM_RDONLY );
|
||||||
pWal->bShmUnreliable = 1;
|
pWal->bShmUnreliable = 1;
|
||||||
pWal->exclusiveMode = WAL_HEAPMEMORY_MODE;
|
pWal->exclusiveMode = WAL_HEAPMEMORY_MODE;
|
||||||
*pChanged = 1;
|
*pChanged = 1;
|
||||||
}else{
|
}else{
|
||||||
return rc; /* Any other non-OK return is just an error */
|
return rc; /* Any other non-OK return is just an error */
|
||||||
}
|
}
|
||||||
};
|
}else{
|
||||||
assert( page0 || pWal->writeLock==0 );
|
/* page0 can be NULL if the SHM is zero bytes in size and pWal->writeLock
|
||||||
|
** is zero, which prevents the SHM from growing */
|
||||||
|
testcase( page0!=0 );
|
||||||
|
}
|
||||||
|
assert( page0!=0 || pWal->writeLock==0 );
|
||||||
|
|
||||||
/* If the first page of the wal-index has been mapped, try to read the
|
/* If the first page of the wal-index has been mapped, try to read the
|
||||||
** wal-index header immediately, without holding any lock. This usually
|
** wal-index header immediately, without holding any lock. This usually
|
||||||
@@ -3661,24 +3674,24 @@ int sqlite3WalExclusiveMode(Wal *pWal, int op){
|
|||||||
assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
|
assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
|
||||||
|
|
||||||
if( op==0 ){
|
if( op==0 ){
|
||||||
if( pWal->exclusiveMode ){
|
if( pWal->exclusiveMode!=WAL_NORMAL_MODE ){
|
||||||
pWal->exclusiveMode = 0;
|
pWal->exclusiveMode = WAL_NORMAL_MODE;
|
||||||
if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
|
if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
|
||||||
pWal->exclusiveMode = 1;
|
pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
|
||||||
}
|
}
|
||||||
rc = pWal->exclusiveMode==0;
|
rc = pWal->exclusiveMode==WAL_NORMAL_MODE;
|
||||||
}else{
|
}else{
|
||||||
/* Already in locking_mode=NORMAL */
|
/* Already in locking_mode=NORMAL */
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}
|
}
|
||||||
}else if( op>0 ){
|
}else if( op>0 ){
|
||||||
assert( pWal->exclusiveMode==0 );
|
assert( pWal->exclusiveMode==WAL_NORMAL_MODE );
|
||||||
assert( pWal->readLock>=0 );
|
assert( pWal->readLock>=0 );
|
||||||
walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
|
walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
|
||||||
pWal->exclusiveMode = 1;
|
pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
|
||||||
rc = 1;
|
rc = 1;
|
||||||
}else{
|
}else{
|
||||||
rc = pWal->exclusiveMode==0;
|
rc = pWal->exclusiveMode==WAL_NORMAL_MODE;
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user