aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/sqlite3-opfs-async-proxy.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/wasm/sqlite3-opfs-async-proxy.js')
-rw-r--r--ext/wasm/sqlite3-opfs-async-proxy.js29
1 files changed, 25 insertions, 4 deletions
diff --git a/ext/wasm/sqlite3-opfs-async-proxy.js b/ext/wasm/sqlite3-opfs-async-proxy.js
index 0abc3ee23..58bbf7928 100644
--- a/ext/wasm/sqlite3-opfs-async-proxy.js
+++ b/ext/wasm/sqlite3-opfs-async-proxy.js
@@ -208,17 +208,28 @@ const wTimeEnd = ()=>(
);
/**
+ Set to true by the 'opfs-async-shutdown' command to quite the wait loop.
+ This is only intended for debugging purposes: we cannot inspect this
+ file's state while the tight waitLoop() is running.
+*/
+let flagAsyncShutdown = false;
+
+/**
Asynchronous wrappers for sqlite3_vfs and sqlite3_io_methods
methods. Maintenance reminder: members are in alphabetical order
to simplify finding them.
*/
const vfsAsyncImpls = {
- 'async-metrics': async ()=>{
- mTimeStart('async-metrics');
+ 'opfs-async-metrics': async ()=>{
+ mTimeStart('opfs-async-metrics');
metrics.dump();
- storeAndNotify('async-metrics', 0);
+ storeAndNotify('opfs-async-metrics', 0);
mTimeEnd();
},
+ 'opfs-async-shutdown': async ()=>{
+ flagAsyncShutdown = true;
+ storeAndNotify('opfs-async-shutdown', 0);
+ },
mkdir: async (dirname)=>{
mTimeStart('mkdir');
let rc = 0;
@@ -597,7 +608,7 @@ const waitLoop = async function f(){
const relinquishTime = 1000;
let lastOpTime = performance.now();
let now;
- while(true){
+ while(!flagAsyncShutdown){
try {
if('timed-out'===Atomics.wait(
state.sabOPView, state.opIds.whichOp, 0, waitTime
@@ -669,6 +680,16 @@ navigator.storage.getDirectory().then(function(d){
waitLoop();
break;
}
+ case 'opfs-async-restart':
+ if(flagAsyncShutdown){
+ warn("Restarting after opfs-async-shutdown. Might or might not work.");
+ flagAsyncShutdown = false;
+ waitLoop();
+ }
+ break;
+ case 'opfs-async-metrics':
+ metrics.dump();
+ break;
}
};
wMsg('opfs-async-loaded');