aboutsummaryrefslogtreecommitdiff
path: root/src/os_unix.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2010-05-06 18:48:27 +0000
committerdan <dan@noemail.net>2010-05-06 18:48:27 +0000
commit65be0d8cce1ce87ba6234f59a12f87f1ce9ae331 (patch)
tree12ec6cd91b3f1f0e5115f3dd1489e7306cfdd642 /src/os_unix.c
parent5273f58f377316ea9920865c41935f6adf7ce8bb (diff)
downloadsqlite-65be0d8cce1ce87ba6234f59a12f87f1ce9ae331.tar.gz
sqlite-65be0d8cce1ce87ba6234f59a12f87f1ce9ae331.zip
Instead of transitioning to RECOVER state from CHECKPOINT when a recovery is required, perform the recovery while holding the CHECKPOINT lock.
FossilOrigin-Name: bb0b6021e721c2e4f1533ab18381604c6b7b31d5
Diffstat (limited to 'src/os_unix.c')
-rw-r--r--src/os_unix.c9
1 files changed, 2 insertions, 7 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 ){