]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Call fsync() right after ftruncate() when in journal_mode=TRUNCATE and
authordrh <drh@noemail.net>
Wed, 29 Oct 2014 01:07:21 +0000 (01:07 +0000)
committerdrh <drh@noemail.net>
Wed, 29 Oct 2014 01:07:21 +0000 (01:07 +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 cherrypick of [3e922208b68563489].

FossilOrigin-Name: a8f9bd1e890434fcffa02fcd2baf8b0fb5d4c9dd

manifest
manifest.uuid
src/pager.c

index e210943d15732d0cd78a4a06dd5dc5d201c7a2b1..a156aa4f0e8ec7362db8140a6d99bdec46b5a3a0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.8.7
-D 2014-10-17T11:24:17.839
+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].\nThis\sis\sa\scherrypick\sof\s[3e922208b68563489].
+D 2014-10-29T01:07:21.172
 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
@@ -1204,10 +1204,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 06c576c152c4013080c255cbbeb45bf2e298be9f
-R 76bb09f8a8f8bdebeb708f5bb39aa31b
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.8.7 *
+P e4ab094f8afce0817f4074e823fabe59fc29ebb4
+Q +3e922208b68563489c7766abb9afb4885113e7b8
+R dac8a0df55bcef8314fa6cd2a33fc123
+T *branch * branch-3.8.7
+T *sym-branch-3.8.7 *
+T -sym-trunk *
 U drh
-Z b2f516d1147acb0e1bf1c700327ee52e
+Z 1e440e6f18a01c290161fa6c4a1f516b
index f4f611fe447103ac0a5cc3052b8d782a0567dd5a..bf1f77f03a5604b8c90bada2b13603c3b03e7a49 100644 (file)
@@ -1 +1 @@
-e4ab094f8afce0817f4074e823fabe59fc29ebb4
\ No newline at end of file
+a8f9bd1e890434fcffa02fcd2baf8b0fb5d4c9dd
\ 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