aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/os_unix.c9
-rw-r--r--src/wal.c10
2 files changed, 9 insertions, 10 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 34f98f55a..72cc06a02 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5339,12 +5339,7 @@ static int unixShmLock(
case SQLITE_SHM_CHECKPOINT: {
assert( p->lockState==SQLITE_SHM_UNLOCK
|| p->lockState==SQLITE_SHM_PENDING
- || p->lockState==SQLITE_SHM_RECOVER );
- if( p->lockState==SQLITE_SHM_RECOVER ){
- unixShmUnlock(pFile, p, UNIX_SHM_C);
- p->lockState = SQLITE_SHM_CHECKPOINT;
- rc = SQLITE_OK;
- }
+ );
if( p->lockState==SQLITE_SHM_UNLOCK ){
rc = unixShmExclusiveLock(pFile, p, UNIX_SHM_B|UNIX_SHM_C);
if( rc==SQLITE_OK ){
@@ -5363,7 +5358,7 @@ static int unixShmLock(
assert( desiredLock==SQLITE_SHM_RECOVER );
assert( p->lockState==SQLITE_SHM_READ
|| p->lockState==SQLITE_SHM_READ_FULL
- || p->lockState==SQLITE_SHM_CHECKPOINT );
+ );
assert( sqlite3_mutex_held(pFile->mutexBuf) );
rc = unixShmExclusiveLock(pFile, p, UNIX_SHM_C);
if( rc==SQLITE_OK ){
diff --git a/src/wal.c b/src/wal.c
index baa2da2b6..b9607cde3 100644
--- a/src/wal.c
+++ b/src/wal.c
@@ -501,7 +501,7 @@ static int walIndexRecover(Wal *pWal){
i64 nSize; /* Size of log file */
WalIndexHdr hdr; /* Recovered wal-index header */
- assert( pWal->lockState==SQLITE_SHM_RECOVER );
+ assert( pWal->lockState>SQLITE_SHM_READ );
memset(&hdr, 0, sizeof(hdr));
rc = sqlite3OsFileSize(pWal->pFd, &nSize);
@@ -941,7 +941,9 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
** time as well, run log recovery.
*/
lockState = pWal->lockState;
- if( SQLITE_OK==(rc = walSetLock(pWal, SQLITE_SHM_RECOVER)) ){
+ if( lockState>SQLITE_SHM_READ
+ || SQLITE_OK==(rc = walSetLock(pWal, SQLITE_SHM_RECOVER))
+ ){
/* This call to walIndexTryHdr() may not return an error code, as the
** wal-index is already mapped. It may find that the header is invalid,
** but there is no chance of hitting an actual error. */
@@ -952,7 +954,9 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
*pChanged = 1;
rc = walIndexRecover(pWal);
}
- walSetLock(pWal, lockState);
+ if( lockState==SQLITE_SHM_READ ){
+ walSetLock(pWal, SQLITE_SHM_READ);
+ }
}
return rc;