From 8c983ddb670097185d0bd26b11b4e65186192820 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 7 Sep 2022 19:28:18 +0000 Subject: [PATCH 1/6] An improved technique for ensuring that the Rekey() operation does not overwrite an existing page number. This approach does not change the semantics of the underlying pluggable pcache and it is easier to prove correct. This replaces the changes at [aadd38f99a3e5abc] and [81cff9f1955874aa]. FossilOrigin-Name: 7dbddde79e3ca1b81e00288616fc27434698ce6dcb47714728fce8602ae91f45 --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/pcache.c | 12 ++++++------ src/pcache1.c | 19 ++----------------- 4 files changed, 16 insertions(+), 32 deletions(-) diff --git a/manifest b/manifest index e6d926c22b..13721a29d5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\stool/omittest-msvc.tcl\sscript\sthat\swill\stry\sto\sbuild\susing\sMSVC\nusing\svarious\scompile-time\soptions,\sto\sensure\sthat\sthe\scompile-time\soptions\nall\sbuild\swithout\serrors. -D 2022-09-05T22:54:36.015 +C An\simproved\stechnique\sfor\sensuring\sthat\sthe\sRekey()\soperation\sdoes\snot\noverwrite\san\sexisting\spage\snumber.\s\sThis\sapproach\sdoes\snot\schange\sthe\nsemantics\sof\sthe\sunderlying\spluggable\spcache\sand\sit\sis\seasier\sto\sprove\ncorrect.\s\sThis\sreplaces\sthe\schanges\sat\n[aadd38f99a3e5abc]\sand\s[81cff9f1955874aa]. +D 2022-09-07T19:28:18.399 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -578,9 +578,9 @@ F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 6176d9752eb580419e8fef4592dc417a6b00ddfd43ee22f818819bf8840ceee8 F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3 F src/parse.y 8e67d820030d2655b9942ffe61c1e7e6b96cea2f2f72183533299393907d0564 -F src/pcache.c 22a6ebe498d1d26c85fd1e3bcb246d97b882c060027c1e1688fbea905f5ac3cf +F src/pcache.c f4268f7f73c6a3db12ce22fd25bc68dc42315d19599414ab1207d7cf32f79197 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 -F src/pcache1.c 849a26ea9dc1e6a176b75dc576672a598170b0b46aeef87a981dd25e0af0ccf9 +F src/pcache1.c 5996285f0a1873b1c7925568d1145865105581d588c1671df0c79b43d507174e F src/pragma.c 9bf7d8a2a9ad3bc36df3ec0d61817a44c38a1da527d59c26c203047f906e334a F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 971d5819a4bda88038c2283d71fc0a2974ffc3dd480f9bd941341017abacfd1b @@ -2000,9 +2000,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P f74a5ea8c986dc33d3afcda169c38abbe55728c56716cf9991a5e2ef7fc4917a 82b89f8a074858a81d841dfc26436e8d39ce4907b8f989eba4d848db16758303 -R 6ca49c20c002174082011fae5352b9a2 -T +closed 82b89f8a074858a81d841dfc26436e8d39ce4907b8f989eba4d848db16758303 +P 6b00ecb59fd303f7985902c35a46db9e729201d4beaedea46596b728d9e4b1c8 +R 8bc604264e2fc000e1d53debee8fb293 U drh -Z 072f191f34018bff25742e9863a6762e +Z 8b6d452122c12811257b08bbb3024121 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1a48ad4407..15ae82f961 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6b00ecb59fd303f7985902c35a46db9e729201d4beaedea46596b728d9e4b1c8 \ No newline at end of file +7dbddde79e3ca1b81e00288616fc27434698ce6dcb47714728fce8602ae91f45 \ No newline at end of file diff --git a/src/pcache.c b/src/pcache.c index 8c57f5b1eb..0407e06b2f 100644 --- a/src/pcache.c +++ b/src/pcache.c @@ -655,14 +655,14 @@ void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ assert( sqlite3PcachePageSanity(p) ); pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno)); pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0); - sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); if( pOther ){ - PgHdr *pPg = (PgHdr*)pOther->pExtra; - pPg->pgno = p->pgno; - if( pPg->pPage==0 ){ - sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pOther, 0); - } + PgHdr *pXPage = (PgHdr*)pOther->pExtra; + assert( pXPage->nRef==0 ); + pXPage->nRef++; + pCache->nRefSum++; + sqlite3PcacheDrop(pXPage); } + sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); p->pgno = newPgno; if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); diff --git a/src/pcache1.c b/src/pcache1.c index a47087fa11..551f1b896b 100644 --- a/src/pcache1.c +++ b/src/pcache1.c @@ -1125,7 +1125,7 @@ static void pcache1Rekey( assert( iOld!=iNew ); /* The page number really is changing */ pcache1EnterMutex(pCache->pGroup); - + assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */ hOld = iOld%pCache->nHash; pp = &pCache->apHash[hOld]; @@ -1134,23 +1134,8 @@ static void pcache1Rekey( } *pp = pPage->pNext; + assert( pcache1FetchNoMutex(p, iOld, 0)==0 ); /* iOld not in cache */ hNew = iNew%pCache->nHash; - pp = &pCache->apHash[hNew]; - while( *pp ){ - if( (*pp)->iKey==iNew ){ - /* If there is already another pcache entry at iNew, change it to iOld, - ** thus swapping the positions of iNew and iOld */ - PgHdr1 *pOld = *pp; - *pp = pOld->pNext; - pOld->pNext = pCache->apHash[hOld]; - pCache->apHash[hOld] = pOld; - pOld->iKey = iOld; - break; - }else{ - pp = &(*pp)->pNext; - } - } - pPage->iKey = iNew; pPage->pNext = pCache->apHash[hNew]; pCache->apHash[hNew] = pPage; From b53e0992b294312c439355435492dfb1b37cd7fc Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 7 Sep 2022 20:11:22 +0000 Subject: [PATCH 2/6] Enhance an assert() to impose for tighter constraints on the operation of pcache. FossilOrigin-Name: 42105eb43a916a7cd839fa6c582eaffaef17f50b23c3e05142400c379feb73c7 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pcache1.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 13721a29d5..4b001c1fe8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C An\simproved\stechnique\sfor\sensuring\sthat\sthe\sRekey()\soperation\sdoes\snot\noverwrite\san\sexisting\spage\snumber.\s\sThis\sapproach\sdoes\snot\schange\sthe\nsemantics\sof\sthe\sunderlying\spluggable\spcache\sand\sit\sis\seasier\sto\sprove\ncorrect.\s\sThis\sreplaces\sthe\schanges\sat\n[aadd38f99a3e5abc]\sand\s[81cff9f1955874aa]. -D 2022-09-07T19:28:18.399 +C Enhance\san\sassert()\sto\simpose\sfor\stighter\sconstraints\son\sthe\soperation\sof\spcache. +D 2022-09-07T20:11:22.675 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -580,7 +580,7 @@ F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3 F src/parse.y 8e67d820030d2655b9942ffe61c1e7e6b96cea2f2f72183533299393907d0564 F src/pcache.c f4268f7f73c6a3db12ce22fd25bc68dc42315d19599414ab1207d7cf32f79197 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 -F src/pcache1.c 5996285f0a1873b1c7925568d1145865105581d588c1671df0c79b43d507174e +F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc F src/pragma.c 9bf7d8a2a9ad3bc36df3ec0d61817a44c38a1da527d59c26c203047f906e334a F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c 971d5819a4bda88038c2283d71fc0a2974ffc3dd480f9bd941341017abacfd1b @@ -2000,8 +2000,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 6b00ecb59fd303f7985902c35a46db9e729201d4beaedea46596b728d9e4b1c8 -R 8bc604264e2fc000e1d53debee8fb293 +P 7dbddde79e3ca1b81e00288616fc27434698ce6dcb47714728fce8602ae91f45 +R 3d3ecc6a79d82686d9e0b48f58e1f898 U drh -Z 8b6d452122c12811257b08bbb3024121 +Z 5fb0b8be05b999eccf9a7905ecda7c89 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 15ae82f961..377fe80f5e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7dbddde79e3ca1b81e00288616fc27434698ce6dcb47714728fce8602ae91f45 \ No newline at end of file +42105eb43a916a7cd839fa6c582eaffaef17f50b23c3e05142400c379feb73c7 \ No newline at end of file diff --git a/src/pcache1.c b/src/pcache1.c index 551f1b896b..adbe953959 100644 --- a/src/pcache1.c +++ b/src/pcache1.c @@ -1134,7 +1134,7 @@ static void pcache1Rekey( } *pp = pPage->pNext; - assert( pcache1FetchNoMutex(p, iOld, 0)==0 ); /* iOld not in cache */ + assert( pcache1FetchNoMutex(p, iNew, 0)==0 ); /* iNew not in cache */ hNew = iNew%pCache->nHash; pPage->iKey = iNew; pPage->pNext = pCache->apHash[hNew]; From bdb6368d725fea2eaec9cc651dfadbe9954ae138 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Fri, 9 Sep 2022 17:50:29 +0000 Subject: [PATCH 3/6] Fix harmless compiler warning seen with MSVC. FossilOrigin-Name: 73c4c68d3b4c16caf8281dabddd7365d24691e5ee2da89b1783eca66bfbd9280 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_win.c | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 4b001c1fe8..f4a1ccce49 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\san\sassert()\sto\simpose\sfor\stighter\sconstraints\son\sthe\soperation\sof\spcache. -D 2022-09-07T20:11:22.675 +C Fix\sharmless\scompiler\swarning\sseen\swith\sMSVC. +D 2022-09-09T17:50:29.375 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -573,7 +573,7 @@ F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c 102f7e5c5b59c18ea3dbc929dc3be8acb3afc0e0b6ad572e032335c9c27f44f1 -F src/os_win.c e9454cb141908e8eef2102180bad353a36480612d5b736e4c2bd5777d9b25a34 +F src/os_win.c 8d129ae3e59e0fa900e20d0ad789e96f2e08177f0b00b53cdda65c40331e0902 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 6176d9752eb580419e8fef4592dc417a6b00ddfd43ee22f818819bf8840ceee8 F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3 @@ -2000,8 +2000,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7dbddde79e3ca1b81e00288616fc27434698ce6dcb47714728fce8602ae91f45 -R 3d3ecc6a79d82686d9e0b48f58e1f898 -U drh -Z 5fb0b8be05b999eccf9a7905ecda7c89 +P 42105eb43a916a7cd839fa6c582eaffaef17f50b23c3e05142400c379feb73c7 +R fd5aff581be86e15a91eeaa3f20f7912 +U mistachkin +Z bd0ebecde4dd76aef42010e0aed5496b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 377fe80f5e..4b00c103ba 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -42105eb43a916a7cd839fa6c582eaffaef17f50b23c3e05142400c379feb73c7 \ No newline at end of file +73c4c68d3b4c16caf8281dabddd7365d24691e5ee2da89b1783eca66bfbd9280 \ No newline at end of file diff --git a/src/os_win.c b/src/os_win.c index 2827b0b49b..d71fb39220 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -5763,7 +5763,8 @@ static int winFullPathname( char *zFull /* Output buffer */ ){ int rc; - sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR); + MUTEX_LOGIC( sqlite3_mutex *pMutex; ) + MUTEX_LOGIC( pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR); ) sqlite3_mutex_enter(pMutex); rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull); sqlite3_mutex_leave(pMutex); From 3e4e697d1c0c76a473a2307937d5bf92543ac19a Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 12 Sep 2022 16:07:24 +0000 Subject: [PATCH 4/6] New run-time options to the speed-check.sh script. FossilOrigin-Name: ff46bc9d2a844dde9dafa157114f4d9ee157205ca5c08ed9ee32f018de310e62 --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/speed-check.sh | 6 ++++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index f4a1ccce49..6c8b53652d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning\sseen\swith\sMSVC. -D 2022-09-09T17:50:29.375 +C New\srun-time\soptions\sto\sthe\sspeed-check.sh\sscript. +D 2022-09-12T16:07:24.415 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1958,7 +1958,7 @@ F tool/showstat4.c 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c F tool/showwal.c 0253c187ae16fdae9cde89e63e1dfcd3bb35e5416d066415f99e2f8cac6ab03d F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe F tool/spaceanal.tcl 1b5be34c6223cb1af06da2a10fb77863eb869b1962d055820b0a11cf2336ab45 -F tool/speed-check.sh ff74a68bb95a0341275f4d3c9a7d8a3800bd278aceecf1913295a1f0175bc3e6 +F tool/speed-check.sh 13f8e07dbfe25f3aecda33fb6068894665af61ca1360a7b654be0ad0c3f3ae0b F tool/speedtest.tcl 06c76698485ccf597b9e7dbb1ac70706eb873355 F tool/speedtest16.c ecb6542862151c3e6509bbc00509b234562ae81e F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff @@ -2000,8 +2000,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 42105eb43a916a7cd839fa6c582eaffaef17f50b23c3e05142400c379feb73c7 -R fd5aff581be86e15a91eeaa3f20f7912 -U mistachkin -Z bd0ebecde4dd76aef42010e0aed5496b +P 73c4c68d3b4c16caf8281dabddd7365d24691e5ee2da89b1783eca66bfbd9280 +R 8caad88aec151feccca0c9cd18faaecf +U drh +Z 5694145593725214ff362dc6756dc32c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4b00c103ba..ee1e7a8414 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -73c4c68d3b4c16caf8281dabddd7365d24691e5ee2da89b1783eca66bfbd9280 \ No newline at end of file +ff46bc9d2a844dde9dafa157114f4d9ee157205ca5c08ed9ee32f018de310e62 \ No newline at end of file diff --git a/tool/speed-check.sh b/tool/speed-check.sh index 6b0fbeb43a..879ffa9562 100644 --- a/tool/speed-check.sh +++ b/tool/speed-check.sh @@ -96,6 +96,9 @@ while test "$1" != ""; do --cachesize) shift; SPEEDTEST_OPTS="$SPEEDTEST_OPTS --cachesize $1" ;; + --stmtcache) + shift; SPEEDTEST_OPTS="$SPEEDTEST_OPTS --stmtcache $1" + ;; --checkpoint) SPEEDTEST_OPTS="$SPEEDTEST_OPTS --checkpoint" ;; @@ -143,6 +146,9 @@ while test "$1" != ""; do SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset rtree" CC_OPTS="$CC_OPTS -DSQLITE_ENABLE_RTREE" ;; + --persist) + SPEEDTEST_OPTS="$SPEEDTEST_OPTS --persist" + ;; --orm) SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset orm" ;; From 20a9ed1dc6fd63573e49328d27e955969f18470d Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 17 Sep 2022 18:29:49 +0000 Subject: [PATCH 5/6] Include the kv-vfs as an optional VFS on unix builds if the SQLITE_OS_KV_OPTIONAL compile-time option is present. FossilOrigin-Name: 852812d1e2ec3c53ad7c6c64662b37d861fefcf1baeee3d58eba88bcb3f6d8df --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/os_kv.c | 14 +++++++++++--- src/os_unix.c | 3 +++ src/sqliteInt.h | 4 ++++ 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 82c40c633a..72b6c37ae8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\slatest\strunk\senhancements\sinto\sthe\skv-vfs\sbranch. -D 2022-09-17T17:26:44.762 +C Include\sthe\skv-vfs\sas\san\soptional\sVFS\son\sunix\sbuilds\sif\sthe\nSQLITE_OS_KV_OPTIONAL\scompile-time\soption\sis\spresent. +D 2022-09-17T18:29:49.617 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -574,9 +574,9 @@ F src/notify.c 89a97dc854c3aa62ad5f384ef50c5a4a11d70fcc69f86de3e991573421130ed6 F src/os.c 0eb831ba3575af5277e47f4edd14fdfc90025c67eb25ce5cda634518d308d4e9 F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 -F src/os_kv.c 3a2d319988df9da8f3a4d0c753a1492542bd3017ff7ae5d07814460eac6b0b19 +F src/os_kv.c 96c4062e9ca8f3bb70f43e05b766dcd30fe5c2f125fd70c51ed6ef01474a6593 F src/os_setup.h 0711dbc4678f3ac52d7fe736951b6384a0615387c4ba5135a4764e4e31f4b6a6 -F src/os_unix.c 0fa91925f0b8831fc0156a9c04d39d86f85baf9eef66c98712395e1715cb75cc +F src/os_unix.c 287aa5f5691a2b356780c63e83abaa33549add84227b8313395f04088486d79c F src/os_win.c 8d129ae3e59e0fa900e20d0ad789e96f2e08177f0b00b53cdda65c40331e0902 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 6176d9752eb580419e8fef4592dc417a6b00ddfd43ee22f818819bf8840ceee8 @@ -597,7 +597,7 @@ F src/shell.c.in e7e7c2c69ae86c5ee9e8ad66227203d46ff6dce8700a1b1dababff01c71d33d F src/sqlite.h.in b9b7fd73239d94db20332bb6e504688001e5564b655e1318a4427a1caef4b99e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h a988810c9b21c0dc36dc7a62735012339dc76fc7ab448fb0792721d30eacb69d -F src/sqliteInt.h 44eb45c25d379361ee1bd7fc49205471c6cb8a3727aed42372cf4716f653ebf2 +F src/sqliteInt.h 587be0322bf30f248350e9b0d1d36feeece94f30bcf057686c6425c36b8ed3c5 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -2004,8 +2004,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ef54961ce69fddb4cfeeff0860288de2858a6f7a5aa396691e8e99933eb9af54 ff46bc9d2a844dde9dafa157114f4d9ee157205ca5c08ed9ee32f018de310e62 -R 4de08b84ca8222edc80a9a00d8c86ac4 +P 37c7ca25a6e837e7f83b96a32e2b1a455730e48a48012c458ae2e734a3ccdd1f +R 32beb89ba30390bdb85cd8d5b10c9a35 U drh -Z f60f4623d1ae77ea9ba72cf01682f06f +Z 6831abb42712ac9e23b5b00f249e84e3 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 21c52cde0a..ef09e7e676 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -37c7ca25a6e837e7f83b96a32e2b1a455730e48a48012c458ae2e734a3ccdd1f \ No newline at end of file +852812d1e2ec3c53ad7c6c64662b37d861fefcf1baeee3d58eba88bcb3f6d8df \ No newline at end of file diff --git a/src/os_kv.c b/src/os_kv.c index db95a305b7..c1df1f526d 100644 --- a/src/os_kv.c +++ b/src/os_kv.c @@ -15,7 +15,7 @@ ** text. */ #include -#if SQLITE_OS_KV +#if SQLITE_OS_KV || (SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL)) /***************************************************************************** ** Debugging logic @@ -89,7 +89,7 @@ static int kvvfsSleep(sqlite3_vfs*, int microseconds); static int kvvfsCurrentTime(sqlite3_vfs*, double*); static int kvvfsCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); -static sqlite3_vfs kvvfs_vfs = { +static sqlite3_vfs sqlite3OsKvvfsObject = { 1, /* iVersion */ sizeof(KVVfsFile), /* szOsFile */ 1024, /* mxPathname */ @@ -1107,14 +1107,22 @@ static int kvvfsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){ *pTimeOut = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000; return SQLITE_OK; } +#endif /* SQLITE_OS_KV || SQLITE_OS_UNIX */ +#if SQLITE_OS_KV /* ** This routine is called initialize the KV-vfs as the default VFS. */ int sqlite3_os_init(void){ - return sqlite3_vfs_register(&kvvfs_vfs, 1); + return sqlite3_vfs_register(&sqlite3OsKvvfsObject, 1); } int sqlite3_os_end(void){ return SQLITE_OK; } #endif /* SQLITE_OS_KV */ + +#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL) +int sqlite3KvvfsInit(void){ + return sqlite3_vfs_register(&sqlite3OsKvvfsObject, 0); +} +#endif diff --git a/src/os_unix.c b/src/os_unix.c index 784686d0a3..c390b51888 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -8065,6 +8065,9 @@ int sqlite3_os_init(void){ sqlite3_vfs_register(&aVfs[i], i==0); #endif } +#ifdef SQLITE_OS_KV_OPTIONAL + sqlite3KvvfsInit(); +#endif unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); #ifndef SQLITE_OMIT_WAL diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 63e3583c8c..7f1dee6eba 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -5456,4 +5456,8 @@ void sqlite3VectorErrorMsg(Parse*, Expr*); const char **sqlite3CompileOptions(int *pnOpt); #endif +#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL) +int sqlite3KvvfsInit(void); +#endif + #endif /* SQLITEINT_H */ From a50d3b7a5de8616d7f8f5a9b64aa78067b4b85a6 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sat, 17 Sep 2022 18:31:31 +0000 Subject: [PATCH 6/6] Fix an uninitialized variable in the decoder kv-vfs. FossilOrigin-Name: 354726aa6c399053785f29104de15091629ce4bc275b9e2205cb3656a9e81cd7 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/os_kv.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 72b6c37ae8..d9677a2ca9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Include\sthe\skv-vfs\sas\san\soptional\sVFS\son\sunix\sbuilds\sif\sthe\nSQLITE_OS_KV_OPTIONAL\scompile-time\soption\sis\spresent. -D 2022-09-17T18:29:49.617 +C Fix\san\suninitialized\svariable\sin\sthe\sdecoder\skv-vfs. +D 2022-09-17T18:31:31.300 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -574,7 +574,7 @@ F src/notify.c 89a97dc854c3aa62ad5f384ef50c5a4a11d70fcc69f86de3e991573421130ed6 F src/os.c 0eb831ba3575af5277e47f4edd14fdfc90025c67eb25ce5cda634518d308d4e9 F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 -F src/os_kv.c 96c4062e9ca8f3bb70f43e05b766dcd30fe5c2f125fd70c51ed6ef01474a6593 +F src/os_kv.c cf02a39ab3271d237890c7de03a49e5ecc19c930b8f4ad6afd43651dc05c9400 F src/os_setup.h 0711dbc4678f3ac52d7fe736951b6384a0615387c4ba5135a4764e4e31f4b6a6 F src/os_unix.c 287aa5f5691a2b356780c63e83abaa33549add84227b8313395f04088486d79c F src/os_win.c 8d129ae3e59e0fa900e20d0ad789e96f2e08177f0b00b53cdda65c40331e0902 @@ -2004,8 +2004,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 37c7ca25a6e837e7f83b96a32e2b1a455730e48a48012c458ae2e734a3ccdd1f -R 32beb89ba30390bdb85cd8d5b10c9a35 +P 852812d1e2ec3c53ad7c6c64662b37d861fefcf1baeee3d58eba88bcb3f6d8df +R 9c6620d4dc4ed0d3ddc9cc9e79cbabf7 U drh -Z 6831abb42712ac9e23b5b00f249e84e3 +Z 7ef728d647d25bb1b8240f0a67ed5ff5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ef09e7e676..1336748789 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -852812d1e2ec3c53ad7c6c64662b37d861fefcf1baeee3d58eba88bcb3f6d8df \ No newline at end of file +354726aa6c399053785f29104de15091629ce4bc275b9e2205cb3656a9e81cd7 \ No newline at end of file diff --git a/src/os_kv.c b/src/os_kv.c index c1df1f526d..fb8eae6270 100644 --- a/src/os_kv.c +++ b/src/os_kv.c @@ -603,7 +603,7 @@ static void kvvfsDecodeJournal( const char *zTxt, /* Text encoding. Zero-terminated */ int nTxt /* Bytes in zTxt, excluding zero terminator */ ){ - unsigned int n; + unsigned int n = 0; int c, i, mult; i = 0; mult = 1;