"D. Richard Hipp" <[EMAIL PROTECTED]> writes:

> A similar bug exists in 2.8.  A fix has been checked
> into CVS.  Version 2.8.16 will be released as soon as
> I can get it built and tested.

Great.  I don't know if you forgot about the patch I sent a while ago, or
decided not to include it.  Here it is again, in case you want to include it.
This fixes an assert() error which can occur if SYNCHRONOUS=OFF is issued,
then operations are performed and then SYNCHRONOUS=ON is issued.


cvs diff: Diffing .
Index: btree.c
===================================================================
RCS file: /sqlite/sqlite/src/btree.c,v
retrieving revision 1.103
diff -u -r1.103 btree.c
--- btree.c10 Mar 2004 13:42:38 -00001.103
+++ btree.c15 Feb 2005 01:03:00 -0000
@@ -753,8 +753,7 @@
 ** normally a worry.
 */
 static int fileBtreeSetCacheSize(Btree *pBt, int mxPage){
-  sqlitepager_set_cachesize(pBt->pPager, mxPage);
-  return SQLITE_OK;
+  return sqlitepager_set_cachesize(pBt->pPager, mxPage);
 }

 /*
Index: pager.c
===================================================================
RCS file: /sqlite/sqlite/src/pager.c,v
retrieving revision 1.101
diff -u -r1.101 pager.c
--- pager.c25 Feb 2004 02:20:41 -00001.101
+++ pager.c15 Feb 2005 01:03:00 -0000
@@ -303,6 +303,14 @@
 # define REFINFO(X)
 #endif

+
+/*
+** Forward declaration
+*/
+static int syncJournal(Pager*);
+
+
+
 /*
 ** Read a 32-bit integer from the given file descriptor.  Store the integer
 ** that is read in *pRes.  Return SQLITE_OK if everything worked, or an
@@ -838,10 +846,11 @@
 ** failure, the database file might be left in an inconsistent and
 ** unrepairable state.
 */
-void sqlitepager_set_cachesize(Pager *pPager, int mxPage){
+int sqlitepager_set_cachesize(Pager *pPager, int mxPage){
+  int rc = SQLITE_OK;
   if( mxPage>=0 ){
     pPager->noSync = pPager->tempFile;
-    if( pPager->noSync==0 ) pPager->needSync = 0;
+    if( pPager->noSync==0 ) rc = syncJournal(pPager);
   }else{
     pPager->noSync = 1;
     mxPage = -mxPage;
@@ -849,6 +858,8 @@
   if( mxPage>10 ){
     pPager->mxPage = mxPage;
   }
+
+  return rc;
 }

 /*
@@ -1028,11 +1039,6 @@
 }

 /*
-** Forward declaration
-*/
-static int syncJournal(Pager*);
-
-/*
 ** Truncate the file to the number of pages specified.
 */
 int sqlitepager_truncate(Pager *pPager, Pgno nPage){
Index: pager.h
===================================================================
RCS file: /sqlite/sqlite/src/pager.h,v
retrieving revision 1.26
diff -u -r1.26 pager.h
--- pager.h11 Feb 2004 02:18:07 -00001.26
+++ pager.h15 Feb 2005 01:03:00 -0000
@@ -73,7 +73,7 @@
 int sqlitepager_open(Pager **ppPager, const char *zFilename,
                      int nPage, int nExtra, int useJournal);
 void sqlitepager_set_destructor(Pager*, void(*)(void*));
-void sqlitepager_set_cachesize(Pager*, int);
+int sqlitepager_set_cachesize(Pager*, int);
 int sqlitepager_close(Pager *pPager);
 int sqlitepager_get(Pager *pPager, Pgno pgno, void **ppPage);
 void *sqlitepager_lookup(Pager *pPager, Pgno pgno);

Reply via email to