aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2010-05-05 19:09:49 +0000
committerdrh <drh@noemail.net>2010-05-05 19:09:49 +0000
commitccd13d1f80b3036d63d78c3d8b8bf70a70f200ff (patch)
tree83664bf35be95d75f51d0451497216389ca1aa5e /src
parentc7991bdf297d0db2189e90a9f63b6e28a52d7038 (diff)
downloadsqlite-ccd13d1f80b3036d63d78c3d8b8bf70a70f200ff.tar.gz
sqlite-ccd13d1f80b3036d63d78c3d8b8bf70a70f200ff.zip
Further simplifications to the SHM locking logic. Remove the SQLITE_SHM_QUERY
option. Unify the WRITE to READ and RECOVER to READ transitions. FossilOrigin-Name: e9bfa6e4ce7d1edc6be8b9173ac3b6bfd180632a
Diffstat (limited to 'src')
-rw-r--r--src/os_unix.c15
-rw-r--r--src/sqlite.h.in6
2 files changed, 6 insertions, 15 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index daca1c365..34f98f55a 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5266,8 +5266,7 @@ static int unixShmLock(
** directly requested; they are side effects from requesting
** SQLITE_SHM_READ and SQLITE_SHM_CHECKPOINT, respectively.
*/
- assert( desiredLock==SQLITE_SHM_QUERY
- || desiredLock==SQLITE_SHM_UNLOCK
+ assert( desiredLock==SQLITE_SHM_UNLOCK
|| desiredLock==SQLITE_SHM_READ
|| desiredLock==SQLITE_SHM_WRITE
|| desiredLock==SQLITE_SHM_CHECKPOINT
@@ -5276,8 +5275,7 @@ static int unixShmLock(
/* Return directly if this is just a lock state query, or if
** the connection is already in the desired locking state.
*/
- if( desiredLock==SQLITE_SHM_QUERY
- || desiredLock==p->lockState
+ if( desiredLock==p->lockState
|| (desiredLock==SQLITE_SHM_READ && p->lockState==SQLITE_SHM_READ_FULL)
){
OSTRACE(("SHM-LOCK shmid-%d, pid-%d request %s and got %s\n",
@@ -5320,15 +5318,12 @@ static int unixShmLock(
p->lockState = SQLITE_SHM_READ;
}
}
- }else if( p->lockState==SQLITE_SHM_WRITE ){
+ }else{
+ assert( p->lockState==SQLITE_SHM_WRITE
+ || p->lockState==SQLITE_SHM_RECOVER );
rc = unixShmSharedLock(pFile, p, UNIX_SHM_A);
unixShmUnlock(pFile, p, UNIX_SHM_C|UNIX_SHM_D);
p->lockState = SQLITE_SHM_READ;
- }else{
- assert( p->lockState==SQLITE_SHM_RECOVER );
- unixShmUnlock(pFile, p, UNIX_SHM_C);
- p->lockState = SQLITE_SHM_READ;
- rc = SQLITE_OK;
}
break;
}
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index f7d462f01..2672690b7 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -879,10 +879,7 @@ struct sqlite3_vfs {
** CAPI3REF: Flags for the xShmLock VFS method
**
** These integer constants define the various locking states that
-** an sqlite3_shm object can be in. The SQLITE_SHM_QUERY integer
-** is not a valid data - it is a constant pasted to the
-** sqlite3_vfs.xShmLock() method for querying the current lock
-** state.
+** an sqlite3_shm object can be in.
*/
#define SQLITE_SHM_UNLOCK 0
#define SQLITE_SHM_READ 1
@@ -891,7 +888,6 @@ struct sqlite3_vfs {
#define SQLITE_SHM_PENDING 4
#define SQLITE_SHM_CHECKPOINT 5
#define SQLITE_SHM_RECOVER 6
-#define SQLITE_SHM_QUERY (-1)
/*
** CAPI3REF: Initialize The SQLite Library