]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix full_fsync() related functionality broken as part of the migration to sqlite3_vfs...
authordanielk1977 <danielk1977@noemail.net>
Mon, 20 Aug 2007 05:36:51 +0000 (05:36 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Mon, 20 Aug 2007 05:36:51 +0000 (05:36 +0000)
FossilOrigin-Name: cb24cda179c2b526c5ac48be75e372d2b9db808c

manifest
manifest.uuid
src/os_unix.c
src/pager.c
src/vdbeaux.c

index 3496399bb77d9f9b51b0adc6ce83333c2f69704e..0640fb4c1f69b8adbf32069abd195444a0e256b1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Further\sprogress\son\smigration\sto\ssqlite3_vfs.\s(CVS\s4242)
-D 2007-08-18T10:59:20
+C Fix\sfull_fsync()\srelated\sfunctionality\sbroken\sas\spart\sof\sthe\smigration\sto\ssqlite3_vfs.\s(CVS\s4243)
+D 2007-08-20T05:36:51
 F Makefile.in 0c0e53720f658c7a551046442dd7afba0b72bfbe
 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -98,11 +98,11 @@ F src/os_os2.c cba4e96fadb949076c717108fe0599d1a3c2e446
 F src/os_os2.h e5f17dd69333632bbc3112881ea407c37d245eb3
 F src/os_test.c 49833426101f99aee4bb5f6a44b7c4b2029fda1c
 F src/os_test.h 903c93554c23d88f34f667f1979e4a1cee792af3
-F src/os_unix.c 07c91dfdf6ae20014d1e7172cd648d3ae1dcebdf
+F src/os_unix.c bf192a86b9aa5ca3889613fde9bac084274f5eed
 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
 F src/os_win.c d868d5f9e95ec9c1b9e2a30c54c996053db6dddd
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c e7b94954a489485e9bc2954810f8708f27dae27d
+F src/pager.c 2771a39e242ec549906240196530f00073cfb741
 F src/pager.h 53087c6fb9db01aed17c7fd044662a27507e89b8
 F src/parse.y c03529c3b82702ada98ce405b390e3a9409708cf
 F src/pragma.c 8f5e37c3cf6dbdeb3645bb80cc58cfc3324c0178
@@ -148,7 +148,7 @@ F src/vdbe.c b5cd895a0516466daacc564da332589a903e2eb0
 F src/vdbe.h 001c5b257567c1d3de7feb2203aac71d0d7b16a3
 F src/vdbeInt.h 8e360d326328e7a66100f468697edf9cfb4567dc
 F src/vdbeapi.c ddfe341249929b89c47a0ff77f8043ef0987612b
-F src/vdbeaux.c c155bc8ef20772d481fbd6733ebdc5921fc725e0
+F src/vdbeaux.c 93724b681d2ff57f4dfca9e5a08fab7b6126d15d
 F src/vdbeblob.c cf9ee3c7d9977cbd896f8b118da4fb4268637f4f
 F src/vdbefifo.c 334c838c8f42d61a94813d136019ee566b5dc2f6
 F src/vdbemem.c 019952d44066a24aef70ca8c284cfd2d1073c398
@@ -529,7 +529,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 08a0f48028794abbeae1b4852652062b38d37d88
-R d17ed65ec6cd4048d7ed68411869b446
+P a258c4ec240f96bccfe493e98d0827ec7dd12e67
+R 92a15d078029bdab5b614dc93495e5a2
 U danielk1977
-Z 457c2c17e418be6c89b765be93941d83
+Z 04438648939c1033589e63dd0eec6b5f
index b9398c1e594f32fb53467f299d95730a5c8f096f..31b1e741287ffd6301d74cbb7ed870d1c03bf7c1 100644 (file)
@@ -1 +1 @@
-a258c4ec240f96bccfe493e98d0827ec7dd12e67
\ No newline at end of file
+cb24cda179c2b526c5ac48be75e372d2b9db808c
\ No newline at end of file
index 6200ac1aef8b136a518300409fd4f6c5a4466c74..15bf9d221486863490637344ca1cbaa30ddd161e 100644 (file)
@@ -1174,8 +1174,14 @@ static int unixSync(sqlite3_file *id, int flags){
   int rc;
   unixFile *pFile = (unixFile*)id;
 
-  int isDataOnly = (flags & SQLITE_SYNC_DATAONLY);
-  int isFullsync = (flags & SQLITE_SYNC_FULL);
+  int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
+  int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL;
+
+  /* Check that one of SQLITE_SYNC_NORMAL, FULL or BARRIER was passed */
+  assert((flags&0x0F)==SQLITE_SYNC_NORMAL
+      || (flags&0x0F)==SQLITE_SYNC_FULL
+      || (flags&0x0F)==SQLITE_SYNC_BARRIER
+  );
 
   assert( pFile );
   OSTRACE2("SYNC    %-3d\n", pFile->h);
index 8100de2945b7fbcdcc8aedbd57f4173303dc110d..b3c245dc730646607d6c12e2d0c0951ff34de292 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.360 2007/08/18 10:59:20 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.361 2007/08/20 05:36:51 danielk1977 Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -307,7 +307,7 @@ struct Pager {
   u8 stmtAutoopen;            /* Open stmt journal when main journal is opened*/
   u8 noSync;                  /* Do not sync the journal if true */
   u8 fullSync;                /* Do extra syncs of the journal for robustness */
-  u8 full_fsync;              /* Use F_FULLFSYNC when available */
+  u8 sync_flags;              /* One of SYNC_NORMAL or SYNC_FULL */
   u8 state;                   /* PAGER_UNLOCK, _SHARED, _RESERVED, etc. */
   u8 tempFile;                /* zFilename is a temporary file */
   u8 readOnly;                /* True for a read-only database */
@@ -1670,7 +1670,7 @@ void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
 void sqlite3PagerSetSafetyLevel(Pager *pPager, int level, int full_fsync){
   pPager->noSync =  level==1 || pPager->tempFile;
   pPager->fullSync = level==3 && !pPager->tempFile;
-  pPager->full_fsync = full_fsync;
+  pPager->sync_flags = (full_fsync?SQLITE_SYNC_FULL:SQLITE_SYNC_NORMAL);
   if( pPager->noSync ) pPager->needSync = 0;
 }
 #endif
@@ -1884,6 +1884,7 @@ int sqlite3PagerOpen(
   /* pPager->needSync = 0; */
   pPager->noSync = pPager->tempFile || !useJournal;
   pPager->fullSync = (pPager->noSync?0:1);
+  pPager->sync_flags = SQLITE_SYNC_NORMAL;
   /* pPager->pFirst = 0; */
   /* pPager->pFirstSynced = 0; */
   /* pPager->pLast = 0; */
@@ -2419,7 +2420,7 @@ static int syncJournal(Pager *pPager){
         if( pPager->fullSync ){
           PAGERTRACE2("SYNC journal of %d\n", PAGERID(pPager));
           IOTRACE(("JSYNC %p\n", pPager))
-          rc = sqlite3OsSync(pPager->jfd, 0);
+          rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags);
           if( rc!=0 ) return rc;
         }
 
@@ -2430,7 +2431,9 @@ static int syncJournal(Pager *pPager){
       }
       PAGERTRACE2("SYNC journal of %d\n", PAGERID(pPager));
       IOTRACE(("JSYNC %p\n", pPager))
-      rc = sqlite3OsSync(pPager->jfd, pPager->full_fsync);
+      rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags| 
+        (pPager->sync_flags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
+      );
       if( rc!=0 ) return rc;
       pPager->journalStarted = 1;
     }
@@ -4007,7 +4010,7 @@ int sqlite3PagerCommitPhaseOne(Pager *pPager, const char *zMaster, Pgno nTrunc){
 
     /* Sync the database file. */
     if( !pPager->noSync ){
-      rc = sqlite3OsSync(pPager->fd, 0);
+      rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
     }
     IOTRACE(("DBSYNC %p\n", pPager))
 
index cfd234ad3541099f0990959c81883d422c2db90e..ed4994cf7d1d3a8530042ef202b633f600e0f1fa 100644 (file)
@@ -1187,11 +1187,10 @@ static int vdbeCommit(sqlite3 *db){
     }
 
 
-    /* Sync the master journal file. Before doing this, open the directory
-    ** the master journal file is store in so that it gets synced too.
-    */
+    /* Sync the master journal file. */
     zMainFile = sqlite3BtreeGetDirname(db->aDb[0].pBt);
-    if( (needSync && (rc=sqlite3OsSync(pMaster,0))!=SQLITE_OK) ){
+    if( (needSync 
+     && (rc=sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))!=SQLITE_OK) ){
       sqlite3OsCloseFree(pMaster);
       sqlite3OsDelete(pVfs, zMaster, 0);
       sqlite3_free(zMaster);