]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Call fsync() right after ftruncate() when in journal_mode=TRUNCATE and
authordrh <drh@noemail.net>
Wed, 22 Oct 2014 02:43:14 +0000 (02:43 +0000)
committerdrh <drh@noemail.net>
Wed, 22 Oct 2014 02:43:14 +0000 (02:43 +0000)
when synchronous=FULL in order to ensure that transactions are durable
across a power loss that happens moments after the commit.  Proposed
fix for [https://bugzilla.mozilla.org/show_bug.cgi?id=1072773].  This
is a cherry-pick of [3e922208b68563]

FossilOrigin-Name: 674848070ec296874f555aaaea511987648bf94e

manifest
manifest.uuid
src/pager.c

index 28b547a053417e65fcf3d835c4059b3c222dff94..7ea8a5bf16377c3e7437d1846a62cd6bdb7a65b8 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.8.6
-D 2014-08-15T11:46:33.931
+C Call\sfsync()\sright\safter\sftruncate()\swhen\sin\sjournal_mode=TRUNCATE\sand\nwhen\ssynchronous=FULL\sin\sorder\sto\sensure\sthat\stransactions\sare\sdurable\nacross\sa\spower\sloss\sthat\shappens\smoments\safter\sthe\scommit.\s\sProposed\nfix\sfor\s[https://bugzilla.mozilla.org/show_bug.cgi?id=1072773].\s\sThis\nis\sa\scherry-pick\sof\s[3e922208b68563]
+D 2014-10-22T02:43:14.227
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -210,7 +210,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 F src/os_unix.c bd7df3094a60915c148517504c76df4fca24e542
 F src/os_win.c 1c936c7b0659d0eb12b868e2cd710a570e78873e
 F src/os_win.h 057344a6720b4c8405d9bd98f58cb37a6ee46c25
-F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8
+F src/pager.c 00ef5573d869fe84de9b09e6b17b3cb3a86e9ea7
 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
 F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
 F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
@@ -1186,10 +1186,11 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 3f45b8192dad7fb1f027cbaa694046e3c1b3e278
-R be8bb3bca247e348b90f7388fee24972
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.8.6 *
+P 9491ba7d738528f168657adb43a198238abde19e
+Q +3e922208b68563489c7766abb9afb4885113e7b8
+R e2e522917c8c11a5fb0e549f473cf3e8
+T *branch * branch-3.8.6
+T *sym-branch-3.8.6 *
+T -sym-trunk *
 U drh
-Z 74d8dd4d4aac0ae87245b4bcefd8b172
+Z 1d3cb2e17bd45e0bacf9eead80abe706
index 01b81a48046e2943e3f29cbbf851b53cabdfff68..81f80cadef441fa3bd292de943ce788a241ac413 100644 (file)
@@ -1 +1 @@
-9491ba7d738528f168657adb43a198238abde19e
\ No newline at end of file
+674848070ec296874f555aaaea511987648bf94e
\ No newline at end of file
index a77dcecc4cfa2e949831bd48beabd9971b0e4288..93e0928af3e8791b672c665fc5990881daf3b590 100644 (file)
@@ -1956,6 +1956,14 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
         rc = SQLITE_OK;
       }else{
         rc = sqlite3OsTruncate(pPager->jfd, 0);
+        if( rc==SQLITE_OK && pPager->fullSync ){
+          /* Make sure the new file size is written into the inode right away.
+          ** Otherwise the journal might resurrect following a power loss and
+          ** cause the last transaction to roll back.  See
+          ** https://bugzilla.mozilla.org/show_bug.cgi?id=1072773
+          */
+          rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
+        }
       }
       pPager->journalOff = 0;
     }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST