1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Minor internal tweaks to the OPFS VFS. Resolve a missing result code which lead to a null deref in xFileSize().

FossilOrigin-Name: 57dd593ef0efa17dfb3a9f4eac36d5b8b879e271de817d8cd94a8c8b56d31870
This commit is contained in:
stephan
2022-12-02 18:56:37 +00:00
parent 95bc4d67bb
commit bb4e4a4840
4 changed files with 23 additions and 17 deletions

View File

@ -295,7 +295,8 @@ const installAsyncProxy = function(self){
if(!fh.syncHandle){ if(!fh.syncHandle){
const t = performance.now(); const t = performance.now();
log("Acquiring sync handle for",fh.filenameAbs); log("Acquiring sync handle for",fh.filenameAbs);
const maxTries = 5, msBase = state.asyncIdleWaitTime * 2; const maxTries = 6,
msBase = state.asyncIdleWaitTime * 2;
let i = 1, ms = msBase; let i = 1, ms = msBase;
for(; true; ms = msBase * ++i){ for(; true; ms = msBase * ++i){
try { try {
@ -515,15 +516,14 @@ const installAsyncProxy = function(self){
xFileSize: async function(fid/*sqlite3_file pointer*/){ xFileSize: async function(fid/*sqlite3_file pointer*/){
mTimeStart('xFileSize'); mTimeStart('xFileSize');
const fh = __openFiles[fid]; const fh = __openFiles[fid];
let rc; let rc = 0;
wTimeStart('xFileSize'); wTimeStart('xFileSize');
try{ try{
affirmLocked('xFileSize',fh); affirmLocked('xFileSize',fh);
const sz = await (await getSyncHandle(fh,'xFileSize')).getSize(); const sz = await (await getSyncHandle(fh,'xFileSize')).getSize();
state.s11n.serialize(Number(sz)); state.s11n.serialize(Number(sz));
rc = 0;
}catch(e){ }catch(e){
state.s11n.storeException(2,e); state.s11n.storeException(1,e);
rc = GetSyncHandleError.convertRc(e,state.sq3Codes.SQLITE_IOERR); rc = GetSyncHandleError.convertRc(e,state.sq3Codes.SQLITE_IOERR);
} }
await releaseImplicitLock(fh); await releaseImplicitLock(fh);

View File

@ -284,7 +284,7 @@ const installOpfsVfs = function callee(options){
noise for seemingly innocuous things like xAccess() checks noise for seemingly innocuous things like xAccess() checks
for missing files, so this option may have one of 3 values: for missing files, so this option may have one of 3 values:
0 = no exception logging 0 = no exception logging.
1 = only log exceptions for "significant" ops like xOpen(), 1 = only log exceptions for "significant" ops like xOpen(),
xRead(), and xWrite(). xRead(), and xWrite().
@ -363,6 +363,7 @@ const installOpfsVfs = function callee(options){
[ [
'SQLITE_ACCESS_EXISTS', 'SQLITE_ACCESS_EXISTS',
'SQLITE_ACCESS_READWRITE', 'SQLITE_ACCESS_READWRITE',
'SQLITE_BUSY',
'SQLITE_ERROR', 'SQLITE_ERROR',
'SQLITE_IOERR', 'SQLITE_IOERR',
'SQLITE_IOERR_ACCESS', 'SQLITE_IOERR_ACCESS',
@ -706,10 +707,15 @@ const installOpfsVfs = function callee(options){
}, },
xFileSize: function(pFile,pSz64){ xFileSize: function(pFile,pSz64){
mTimeStart('xFileSize'); mTimeStart('xFileSize');
const rc = opRun('xFileSize', pFile); let rc = opRun('xFileSize', pFile);
if(0==rc){ if(0==rc){
const sz = state.s11n.deserialize()[0]; try {
wasm.setMemValue(pSz64, sz, 'i64'); const sz = state.s11n.deserialize()[0];
wasm.setMemValue(pSz64, sz, 'i64');
}catch(e){
error("Unexpected error reading xFileSize() result:",e);
rc = state.sq3Codes.SQLITE_IOERR;
}
} }
mTimeEnd(); mTimeEnd();
return rc; return rc;
@ -1160,7 +1166,7 @@ const installOpfsVfs = function callee(options){
[ [
/* Truncate journal mode is faster than delete for /* Truncate journal mode is faster than delete for
this vfs, per speedtest1. That gap seems to have closed with this vfs, per speedtest1. That gap seems to have closed with
Chome version 108 or 109, but "persist" is very roughly 5-6% Chrome version 108 or 109, but "persist" is very roughly 5-6%
faster than truncate in initial tests. */ faster than truncate in initial tests. */
"pragma journal_mode=persist;", "pragma journal_mode=persist;",
/* Set a default busy-timeout handler to help OPFS dbs /* Set a default busy-timeout handler to help OPFS dbs

View File

@ -1,5 +1,5 @@
C OPFS\sVFS:\stranslate\screateSyncAccessHandle()\sexceptions\swhich\sappear\sto\sbe\slocking\sviolations\sto\sSQLITE_BUSY.\sThis\sseems\sto\simprove\sconcurrency\sconsiderably\seven\swith\sa\sreduced\sretry\scount\sof\s5\s(was\s6). C Minor\sinternal\stweaks\sto\sthe\sOPFS\sVFS.\sResolve\sa\smissing\sresult\scode\swhich\slead\sto\sa\snull\sderef\sin\sxFileSize().
D 2022-12-02T18:06:26.286 D 2022-12-02T18:56:37.557
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -508,9 +508,9 @@ F ext/wasm/api/sqlite3-api-oo1.js c8b6c9ccb64cf93ca990ac689e98963735110aec21f98e
F ext/wasm/api/sqlite3-api-prologue.js 42d6b316b542cf8e086f2f272460deb72dff184f1438a3377383cab99b08070b F ext/wasm/api/sqlite3-api-prologue.js 42d6b316b542cf8e086f2f272460deb72dff184f1438a3377383cab99b08070b
F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3 F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
F ext/wasm/api/sqlite3-opfs-async-proxy.js 132e27f2172411020bb3a35ce5897c6437a960b4d744e7b8bdf3c6e3e32369dd F ext/wasm/api/sqlite3-opfs-async-proxy.js f79dd8d98ef3e0b55c10bb2bee7a3840fa967318e1f577c156aafc34664271d1
F ext/wasm/api/sqlite3-vfs-helper.js 4ad4faf02e1524bf0296be8452c00b5708dce6faf649468d0377e26a0b299263 F ext/wasm/api/sqlite3-vfs-helper.js 4ad4faf02e1524bf0296be8452c00b5708dce6faf649468d0377e26a0b299263
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 146fbdac3c2ffa006ad4e95430396496caca0584c70623ae64e6c452a82c0e7f F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js b8889f182ba7b5c1be8bcf6f47b538519e3fff0e98d7cf8b9d1fa4a9afdfb8ce
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9 F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
F ext/wasm/api/sqlite3-wasm.c 733bc939f93caef0df0b3ebfea14cbd528da580fdef1a35b1f69c2b3e044c7b7 F ext/wasm/api/sqlite3-wasm.c 733bc939f93caef0df0b3ebfea14cbd528da580fdef1a35b1f69c2b3e044c7b7
F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b
@ -2065,8 +2065,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P b57e3c3db00a6bc6db20c82530479f9eba7e37b731f0da6fe81682e84c7ac916 P 0d36021d107d3afca190ad61c3380536ad0cc2d493d345d48f9f9c1191741128
R 8232ca838233bb862b578dd17ef993c2 R 6eba0a795b491027bc2604925d67afb7
U stephan U stephan
Z a512e857bd2ba2b089c64ccfca3b82d0 Z 379ecd060fe213536d8ac858396e84c5
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
0d36021d107d3afca190ad61c3380536ad0cc2d493d345d48f9f9c1191741128 57dd593ef0efa17dfb3a9f4eac36d5b8b879e271de817d8cd94a8c8b56d31870