aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-10-22 02:43:14 +0000
committerdrh <drh@noemail.net>2014-10-22 02:43:14 +0000
commitae64b5de71addb559468fe0221ec2a07a8195b89 (patch)
tree4867687abe415012340a26247184e1d3217302ca
parent932de71e39d3192ec6138f0676fa7de41807ae2c (diff)
downloadsqlite-ae64b5de71addb559468fe0221ec2a07a8195b89.tar.gz
sqlite-ae64b5de71addb559468fe0221ec2a07a8195b89.zip
Call fsync() right after ftruncate() when in journal_mode=TRUNCATE and
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
-rw-r--r--manifest19
-rw-r--r--manifest.uuid2
-rw-r--r--src/pager.c8
3 files changed, 19 insertions, 10 deletions
diff --git a/manifest b/manifest
index 28b547a05..7ea8a5bf1 100644
--- 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
diff --git a/manifest.uuid b/manifest.uuid
index 01b81a480..81f80cade 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-9491ba7d738528f168657adb43a198238abde19e \ No newline at end of file
+674848070ec296874f555aaaea511987648bf94e \ No newline at end of file
diff --git a/src/pager.c b/src/pager.c
index a77dcecc4..93e0928af 100644
--- a/src/pager.c
+++ b/src/pager.c
@@ -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