]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a pager bug introduced by the wal code.
authordan <dan@noemail.net>
Tue, 13 Apr 2010 11:18:40 +0000 (11:18 +0000)
committerdan <dan@noemail.net>
Tue, 13 Apr 2010 11:18:40 +0000 (11:18 +0000)
FossilOrigin-Name: 4a0b29dc5e573a5d696ede17db5d7acf8d23aa98

manifest
manifest.uuid
src/pager.c
test/quick.test

index d477b9f2ae3cb01f764e8af606c9e2531d10d160..99790f6114794217f99cf0ec47b4bbf5d41788d4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Sync\swal\sbranch\swith\s[012cf101bf].
-D 2010-04-13T06:20:45
+C Fix\sa\spager\sbug\sintroduced\sby\sthe\swal\scode.
+D 2010-04-13T11:18:40
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -154,7 +154,7 @@ F src/os_common.h 240c88b163b02c21a9f21f87d49678a0aa21ff30
 F src/os_os2.c 75a8c7b9a00a2cf1a65f9fa4afbc27d46634bb2f
 F src/os_unix.c 5bf0015cebe2f21635da2af983c348eb88b3b4c1
 F src/os_win.c 1c7453c2df4dab26d90ff6f91272aea18bcf7053
-F src/pager.c d61318cd04a42076c6524cb22c14fe036adbddcb
+F src/pager.c 020c29713e77755f316cd95c233e75582a63766e
 F src/pager.h 80c57ba672fcd24215a68abf1c98d474a5080b9b
 F src/parse.y ace5c7a125d9f2a410e431ee3209034105045f7e
 F src/pcache.c ace8f6a5ecd4711cc66a1b23053be7109bd437cf
@@ -537,7 +537,7 @@ F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47
 F test/printf.test 05970cde31b1a9f54bd75af60597be75a5c54fea
 F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301
 F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc
-F test/quick.test d6591e74f3ac19da7fd076845f06dca48fd43cff
+F test/quick.test b72d77e97ab2e6bd890bdc0ed4b7f57ec2f7ef93
 F test/quote.test 215897dbe8de1a6f701265836d6601cc6ed103e6
 F test/randexpr1.tcl 40dec52119ed3a2b8b2a773bce24b63a3a746459
 F test/randexpr1.test 1084050991e9ba22c1c10edd8d84673b501cc25a
@@ -803,7 +803,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P c15fda145b621fc86402914aa5b015e53590555a 012cf101bf8be9e39c138786ea5a5039b8131e55
-R a82603ab9844babf112f19212a1fe8c5
+P 9d690f24f634696f76fa38372461cfa69263e91e
+R 8f595e612b9933c5a5c59646f7c7d5da
 U dan
-Z 1e9c7b3cdd0156e9796faa9c1b265349
+Z 45325555f32460c0270b99616d9c91ef
index 1d692935b5bd207ee4e698a93441c2b802c10bd6..165ffdb1f4a7e00c60f3d037c2a6ce8cfd533795 100644 (file)
@@ -1 +1 @@
-9d690f24f634696f76fa38372461cfa69263e91e
\ No newline at end of file
+4a0b29dc5e573a5d696ede17db5d7acf8d23aa98
\ No newline at end of file
index 383c0fe6bd1221f6f60883bdcfba4df14be8bda7..a1b49ef113a2c9d0877d9eeaae0bd5eac7f76e0b 100644 (file)
@@ -3782,20 +3782,17 @@ int sqlite3PagerSharedLock(Pager *pPager){
     pager_reset(pPager);
   }
 
-  if( pPager->noReadlock ){
-    assert( pPager->readOnly );
-    pPager->state = PAGER_SHARED;
-  }else{
+  if( pagerUseLog(pPager) ){
+    int changed = 0;
+
+    /* TODO: Change the following block to grab a WAL read-lock. Or, 
+    ** combine obtaining the read-lock with LogOpenSnapshot()?  */
     rc = pager_wait_on_lock(pPager, SHARED_LOCK);
     if( rc!=SQLITE_OK ){
       assert( pPager->state==PAGER_UNLOCK );
       return pager_error(pPager, rc);
     }
-  }
-  assert( pPager->state>=SHARED_LOCK );
 
-  if( pagerUseLog(pPager) ){
-    int changed = 0;
     rc = sqlite3LogOpenSnapshot(pPager->pLog, &changed);
     if( rc==SQLITE_OK ){
       if( changed ){
@@ -3810,6 +3807,17 @@ int sqlite3PagerSharedLock(Pager *pPager){
     int isHotJournal = 0;
     assert( !MEMDB );
     assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
+    if( pPager->noReadlock ){
+      assert( pPager->readOnly );
+      pPager->state = PAGER_SHARED;
+    }else{
+      rc = pager_wait_on_lock(pPager, SHARED_LOCK);
+      if( rc!=SQLITE_OK ){
+        assert( pPager->state==PAGER_UNLOCK );
+        return pager_error(pPager, rc);
+      }
+    }
+    assert( pPager->state>=SHARED_LOCK );
 
     /* If a journal file exists, and there is no RESERVED lock on the
     ** database file, then it either needs to be played back or deleted.
index 431b829ef7f483f157c7afb8e386000289256947..4ab211ade6e0c6f99adde17464f5a2c06d84856a 100644 (file)
@@ -101,6 +101,9 @@ set EXCLUDE {
   vtab_err.test
   veryquick.test
   mallocAll.test
+
+  walslow.test
+  walcrash.test
 }
 
 if {[sqlite3 -has-codec]} {