]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Call fsync() right after ftruncate() when in journal_mode=TRUNCATE and
authordrh <drh@noemail.net>
Tue, 21 Oct 2014 21:56:06 +0000 (21:56 +0000)
committerdrh <drh@noemail.net>
Tue, 21 Oct 2014 21:56:06 +0000 (21:56 +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].

FossilOrigin-Name: 3e922208b68563489c7766abb9afb4885113e7b8

manifest
manifest.uuid
src/pager.c

index 3daca49fdda36f3c494a3228c3b486adfd324a14..f4a8a2a556ff1695ade75366e855fc7c8d35c28c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Further\stuning\sof\sthe\scost\sestimates\sfor\sskip-scan\sloops,\sespecially\sfor\scases\nwhen\sskip-scan\sloops\sare\sin\scompetition\swith\sregular\sloops.
-D 2014-10-21T18:16:21.388
+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].
+D 2014-10-21T21:56:06.890
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -215,7 +215,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 F src/os_unix.c fb587121840f690101336879adfa6d0b2cd0e8c7
 F src/os_win.c a019caaae2bcbbc0cc4c39af6e7d7e43d8426053
 F src/os_win.h 09e751b20bbc107ffbd46e13555dc73576d88e21
-F src/pager.c a171cf9dd09c6cb162b262c328d4dfd198e04f80
+F src/pager.c a98547ad9b1b5dbbc5e7d1c520be041b5d2c0926
 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
 F src/parse.y 5dfead8aed90cb0c7c1115898ee2266804daff45
 F src/pcache.c 4121a0571c18581ee9f82f086d5e2030051ebd6a
@@ -1205,7 +1205,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P ec1e942f08548695ff02645b3f3cd6bb2516bc9a
-R 4f5d15d10f268e58d7c047d490bf8adc
+P a27861c28c4791e51d797aa37e9cca806cb58775
+R 1375151e695773da263f40095fae22af
 U drh
-Z 7d7f3f0271fe8b8df2863a2c22053442
+Z be5219411fed69e2fe0e0626925bcd5e
index 52d4aafd994c789f2a179914c012decfee4023b3..db15d6664e67000868e79e399c54a48f55ab07f0 100644 (file)
@@ -1 +1 @@
-a27861c28c4791e51d797aa37e9cca806cb58775
\ No newline at end of file
+3e922208b68563489c7766abb9afb4885113e7b8
\ No newline at end of file
index d3a36ef4842960c2c766a2c1fcf875124aee1427..d840a39a159f4d56b1d45234ed54e012c843bf73 100644 (file)
@@ -1941,6 +1941,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