]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not journal the locking page which doing an autovacuum. Similar to the
authordrh <drh@noemail.net>
Fri, 16 Sep 2005 17:16:52 +0000 (17:16 +0000)
committerdrh <drh@noemail.net>
Fri, 16 Sep 2005 17:16:52 +0000 (17:16 +0000)
problem of #1432 except that this one occurs on autovacuum instead of vacuum.
An assert() has been added to catch any future incidents of this type. (CVS 2704)

FossilOrigin-Name: 5b6dc12b7d25d999be5d282cd0b06e02e2bda765

manifest
manifest.uuid
src/pager.c

index 00bcf204c84a550c5a41c378568b7d026a978b94..fe4e124a37b4d534baa7df281d240a788768ee32 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sjournal\sthe\sfile\slocking\spage\swhen\sdoing\sa\sdatabase\scopy\sas\npart\sof\sa\sVACUUM.\s\sTicket\s#1432.\s(CVS\s2703)
-D 2005-09-16T11:32:18
+C Do\snot\sjournal\sthe\slocking\spage\swhich\sdoing\san\sautovacuum.\s\sSimilar\sto\sthe\nproblem\sof\s#1432\sexcept\sthat\sthis\sone\soccurs\son\sautovacuum\sinstead\sof\svacuum.\nAn\sassert()\shas\sbeen\sadded\sto\scatch\sany\sfuture\sincidents\sof\sthis\stype.\s(CVS\s2704)
+D 2005-09-16T17:16:53
 F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1
 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -56,7 +56,7 @@ F src/os_unix.c c86cf43b7ca9200e6fb7bc202ad2cc7da2f69367
 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
 F src/os_win.c ed03a35b2894f9b99840415f941a9f8594dea756
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c 96802068d3f387a6a4f016d840366ac9f8afcf6e
+F src/pager.c 68b059546919456925a90c5c30c451642f07893c
 F src/pager.h 17b13225abd93c1e9f470060f40a21b9edb5a164
 F src/parse.y 5602d5cb894dda2932bf50b7e88782a4440ae3ae
 F src/pragma.c 69413fbdc0c6aaa493a776ea52c1b3e6cf35dfb2
@@ -307,7 +307,7 @@ F www/tclsqlite.tcl ddcf912ea48695603c8ed7efb29f0812ef8d1b49
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 35a8893537ae5faed6ee49270ac9c01a6010993f
-R 4f6752612df08a912c75d90f62aa8a80
+P 248f77972bb1be3325708ea143fd87bb7ce914a7
+R 62af5c92fcfe64d9cc594ec8493542ca
 U drh
-Z 5f588c09ac24589f63c729ebd13fcd32
+Z 0ea04e760a26e6d28f44fdc2389d9391
index e8208c1eddb191c637a441f354bfeedbd1ddd2ce..b779b858e4501e2c547e9bdffa080a6413e1a3ce 100644 (file)
@@ -1 +1 @@
-248f77972bb1be3325708ea143fd87bb7ce914a7
\ No newline at end of file
+5b6dc12b7d25d999be5d282cd0b06e02e2bda765
\ No newline at end of file
index 9429c1c635e2393a835004813b5d1d09225aefb5..9d894286a4c315392ae851924aedd7894f51d789 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.213 2005/09/16 10:18:46 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.214 2005/09/16 17:16:53 drh Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -2307,7 +2307,7 @@ int sqlite3pager_get(Pager *pPager, Pgno pgno, void **ppPage){
   /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
   ** number greater than this, or zero, is requested.
   */
-  if( pgno>PAGER_MAX_PGNO || pgno==0 ){
+  if( pgno>PAGER_MAX_PGNO || pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
     return SQLITE_CORRUPT;
   }
 
@@ -2833,6 +2833,10 @@ int sqlite3pager_write(void *pData){
           }
         }else{
           u32 cksum;
+          /* We should never write to the journal file the page that
+          ** contains the database locks.  The following assert verifies
+          ** that we do not. */
+          assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
           CODEC(pPager, pData, pPg->pgno, 7);
           cksum = pager_cksum(pPager, pPg->pgno, pData);
           saved = *(u32*)PGHDR_TO_EXTRA(pPg, pPager);
@@ -3459,8 +3463,9 @@ int sqlite3pager_sync(Pager *pPager, const char *zMaster, Pgno nTrunc){
         */
         Pgno i;
         void *pPage;
+        int iSkip = PAGER_MJ_PGNO(pPager);
         for( i=nTrunc+1; i<=pPager->origDbSize; i++ ){
-          if( !(pPager->aInJournal[i/8] & (1<<(i&7))) ){
+          if( !(pPager->aInJournal[i/8] & (1<<(i&7))) && i!=iSkip ){
             rc = sqlite3pager_get(pPager, i, &pPage);
             if( rc!=SQLITE_OK ) goto sync_exit;
             rc = sqlite3pager_write(pPage);