From: dan Date: Fri, 1 May 2015 16:57:24 +0000 (+0000) Subject: Fix an assert() failure caused by setting "PRAGMA journal_mode=off" on an database... X-Git-Tag: version-3.8.10~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=929b923388c3ea0482b13d44bd731f67fdd08fa8;p=thirdparty%2Fsqlite.git Fix an assert() failure caused by setting "PRAGMA journal_mode=off" on an database in exclusive-mode that has already opened the journal file. FossilOrigin-Name: 40db3e40126db1035fcc12989026915744dc5651 --- diff --git a/manifest b/manifest index 816970f140..599f06b62a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sobselete\scomment\stext\sfrom\sthe\sdescription\sof\sthe\sTable\sobject.\nNo\schanges\sto\scode. -D 2015-05-01T15:25:51.767 +C Fix\san\sassert()\sfailure\scaused\sby\ssetting\s"PRAGMA\sjournal_mode=off"\son\san\sdatabase\sin\sexclusive-mode\sthat\shas\salready\sopened\sthe\sjournal\sfile. +D 2015-05-01T16:57:24.266 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in e3268d234210842b4be0a6e2e1c5990999f1d9f4 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -217,7 +217,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c 23eb5f56fac54d8fe0cb204291f3b3b2d94f23fc F src/os_win.c 2da99cf07da7db6bcb1974013abfd89ec74749b3 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca -F src/pager.c 5283581c8ce8950ff483a0b3a3cab9cb4d25a21e +F src/pager.c 97110085b1321298412f1e5c37bddb95b36d9208 F src/pager.h c3476e7c89cdf1c6914e50a11f3714e30b4e0a77 F src/parse.y c4e0387bc88c8e21e5ba653e2578959a1f3cdbc7 F src/pcache.c 10539fb959849ad6efff80050541cab3d25089d4 @@ -690,7 +690,7 @@ F test/join6.test cfe6503791ceb0cbb509966740286ec423cbf10b F test/journal1.test 69abc726c51b4a0409189f9a85191205297c0577 F test/journal2.test ae06f566c28552c313ded3fee79a6c69e6d049b1 F test/journal3.test ff8af941f9e06161d3db1b46bb9f965ff0e7f307 -F test/jrnlmode.test 9ee3a78f53d52cca737db69293d15dc41c0cbd36 +F test/jrnlmode.test 6014ba5c11d66ff8bc7d87a7a2abc5c54be73b2e F test/jrnlmode2.test 81610545a4e6ed239ea8fa661891893385e23a1d F test/jrnlmode3.test 556b447a05be0e0963f4311e95ab1632b11c9eaa F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff @@ -1255,7 +1255,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 605347e087ec5eb817f3c94f4616abe26c7ab66b -R 49af71398b314fdf0cd1517eca78da9a -U drh -Z cb062f9c66d14cbf9dc87b64ba4f37f6 +P 6566b72a9c68b347d126189b376f52ffd56edfba +R f6676a27ea8fd7f080695c7806564a78 +U dan +Z fe516a6f38b171b235c89343c757478c diff --git a/manifest.uuid b/manifest.uuid index f89a1c75ce..7dd91f8856 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6566b72a9c68b347d126189b376f52ffd56edfba \ No newline at end of file +40db3e40126db1035fcc12989026915744dc5651 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 9ee2ecab5a..91378f0612 100644 --- a/src/pager.c +++ b/src/pager.c @@ -7010,6 +7010,8 @@ int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ } assert( state==pPager->eState ); } + }else if( eMode==PAGER_JOURNALMODE_OFF ){ + sqlite3OsClose(pPager->jfd); } } diff --git a/test/jrnlmode.test b/test/jrnlmode.test index b1007c4908..cebbfe5638 100644 --- a/test/jrnlmode.test +++ b/test/jrnlmode.test @@ -555,4 +555,19 @@ do_execsql_test jrnlmode-8.28 { PRAGMA journal_mode=DELETE } {delete} do_execsql_test jrnlmode-8.29 { COMMIT } {} do_execsql_test jrnlmode-8.30 { PRAGMA journal_mode=DELETE } {delete} +# Assertion fault on 2015-05-01 +do_test jrnlmode-9.1 { + forcedelete test2.db + sqlite3 db2 test2.db + breakpoint + db2 eval {CREATE TEMP TABLE t(l); PRAGMA journal_mode=off;} + db2 close +} {} +do_execsql_test jrnlmode-9.2 { + PRAGMA locking_mode = exclusive; + CREATE TABLE tx(a); + PRAGMA journal_mode = off; +} {exclusive off} + + finish_test