From ccd13d1f80b3036d63d78c3d8b8bf70a70f200ff Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 5 May 2010 19:09:49 +0000 Subject: [PATCH] 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 --- manifest | 26 ++++++++++++++++++-------- manifest.uuid | 2 +- src/os_unix.c | 15 +++++---------- src/sqlite.h.in | 6 +----- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/manifest b/manifest index 5931045e75..a3027053de 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,8 @@ -C Test\sthe\shandling\sof\serrors\sreturned\sby\sthe\sxShmXXX()\sAPIs. -D 2010-05-05T19:04:59 +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +C Further\ssimplifications\sto\sthe\sSHM\slocking\slogic.\s\sRemove\sthe\sSQLITE_SHM_QUERY\noption.\s\sUnify\sthe\sWRITE\sto\sREAD\sand\sRECOVER\sto\sREAD\stransitions. +D 2010-05-05T19:09:49 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d83a0ffef3dcbfb08b410a6c6dd6c009ec9167fb F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -150,7 +153,7 @@ F src/os.c aec6922553585a25d5655666defc125a7e217674 F src/os.h b389844e5469a2918e8a45fe6ae52b4c28dfb2b2 F src/os_common.h 0d6ee583b6ee3185eb9d951f890c6dd03021a08d F src/os_os2.c 8ad77a418630d7dee91d1bb04f79c2096301d3a0 -F src/os_unix.c 623a195fbcdb7b92cf275acf3ced2388459519a4 +F src/os_unix.c 2ce91d5d9a8d0e8d4d2ed3bcb510d19945b77bc5 F src/os_win.c a8fc01d8483be472e495793c01064fd87e56a5c1 F src/pager.c 224df6ad5f8c1fed238570092199db1e57233779 F src/pager.h 934b598583a9d936bb13c37d62a2fe68ac48781c @@ -166,7 +169,7 @@ F src/resolve.c ac5f1a713cd1ae77f08b83cc69581e11bf5ae6f9 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c c03d8a0565febcde8c6a12c5d77d065fddae889b F src/shell.c c40427c7245535a04a9cb4a417b6cc05c022e6a4 -F src/sqlite.h.in ac4c94610542bdbaa9cc94be3059d6830caea8ff +F src/sqlite.h.in e6ead287be496055ade50424b7799f84475da7d7 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqliteInt.h 9819b45610abeca390176243a9a31758c1f0ac7a F src/sqliteLimit.h 196e2f83c3b444c4548fc1874f52f84fdbda40f3 @@ -810,7 +813,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P ec7157788b16936b4b6e4642107b3c86aa44df24 -R 6831c56fbef38774f5073956c09582ec -U dan -Z 80e37064d0fb8ee254d6e645af9fdd96 +P 72663123d6be2b194cad7a6057d0f20dd0d9fe05 +R a9b4a745dd84e1e6c5aa687e7866b305 +U drh +Z ba8b9550144dbde8add352394fc13a1f +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +iD8DBQFL4cJ/oxKgR168RlERAn5HAJ9H9/xHH78dGiXt8tKDpcuSc8tO9QCfaUiX +yaPexQIPM4/rd4uKeZ+hs2w= +=FoJP +-----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 083d34427f..464cbe9114 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -72663123d6be2b194cad7a6057d0f20dd0d9fe05 \ No newline at end of file +e9bfa6e4ce7d1edc6be8b9173ac3b6bfd180632a \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index daca1c365f..34f98f55a6 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 f7d462f017..2672690b75 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