A failed experiment in hiding JS async behind a sync interface. It's a fraction of a hair's width from working but can't work because of the timing when async tasks get the chance to run. Stashing for future contemplation.
FossilOrigin-Name: d5753272e4861f664297ac0b81f3da9709bbdc9c67663d53688b12d7a05c68a7
diff --git a/ext/wasm/api/sqlite3-wasm.c b/ext/wasm/api/sqlite3-wasm.c
index a1d7cb0..a9def81 100644
--- a/ext/wasm/api/sqlite3-wasm.c
+++ b/ext/wasm/api/sqlite3-wasm.c
@@ -1836,6 +1836,21 @@
}
#endif /* __EMSCRIPTEN__ && SQLITE_ENABLE_WASMFS */
+#if 0
+SQLITE_WASM_EXPORT
+int sqlite3__wasm_wait_int32(int32_t * addr, int interval, int max){
+ unsigned tWaited = 0;
+ if( interval <= 0 ) interval = 50;
+ if( max <= 0 ) max = 3000;
+ while( tWaited < max ){
+ //printf("tWaited=%d, interval=%d, max=%d, *addr=%d\n", tWaited, interval, max, *addr);
+ if( *addr ) return 1;
+ tWaited += sqlite3_sleep(interval);
+ }
+ return 0;
+}
+#endif
+
#if SQLITE_WASM_ENABLE_C_TESTS
SQLITE_WASM_EXPORT
diff --git a/ext/wasm/tester1.c-pp.html b/ext/wasm/tester1.c-pp.html
index 4bb53ee..364a4af 100644
--- a/ext/wasm/tester1.c-pp.html
+++ b/ext/wasm/tester1.c-pp.html
@@ -40,5 +40,15 @@
<script src="@sqlite3.js@"></script>
<script src="@tester1.js@"></script>
//#endif
- </body>
+//#if nope
+ <script type='tester1/worker' id='worker-asyncTest1'>
+ onmessage = function(e){
+ console.debug("tester1 Worker message:",e);
+ postMessage('gone');
+ };
+ console.debug("tester1/worker coming to life");
+ postMessage('ready');
+ </script>
+//#endif
+</body>
</html>
diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js
index b7d4afe..8451bdc 100644
--- a/ext/wasm/tester1.c-pp.js
+++ b/ext/wasm/tester1.c-pp.js
@@ -140,6 +140,9 @@
}
TestUtil.checkHeapSize(true);
};
+ const debug = (...args)=>{
+ console.debug('tester1',...args);
+ };
const log = (...args)=>{
//console.log(...args);
logClass('',...args);
@@ -3304,6 +3307,70 @@
//#endif enable-see
;/* end kvvfs tests */
+//#if nope
+ ////////////////////////////////////////////////////////////////////////
+ T.g('Async as sync experiment')
+ .t({
+ name: 'async via sync',
+ predicate: ()=>isUIThread() || 'UI thread only',
+ test: function(sqlite3){
+ log("An experiment in hiding async behind a sync interface.");
+ const nExpect = 11;
+ const blob = new Blob(
+ [document.querySelector("#worker-asyncTest1").textContent],
+ { type: "text/javascript" }
+ );
+ const dbg = (...args)=>console.warn('syncy test',...args);
+ const startTime = Date.now();
+ const indirection = function*(pOut){
+ const genWaiter = function*(ptrToWatch, maxWait){
+ const maxTime = startTime + maxWait;
+ const gap = 200;
+ let n = 0;
+ const f = wasm.exports.sqlite3__wasm_wait_int32;
+ do{
+ dbg("Checking ptr...");
+ ++n;
+ if( f(ptrToWatch, 75, gap) ){
+ break;
+ }
+ dbg("nope to ptr", n);
+ yield 0;
+ }while( Date.now() + gap < maxTime );
+ dbg("Exited loop?");
+ dbg("Got async result", wasm.peek32(ptrToWatch));
+ return 1;
+ //return 0;
+ };
+ const waiter = genWaiter(pOut, 3000);
+ // does not fire when we need it to. setTimeout( fa, 300 );
+ debug("Beginning wait on pOut...");
+ yield *waiter;
+ //wasm.dealloc(pOut);
+ };
+ const pOut = wasm.alloc(4);
+ if( 1 ){
+ dbg("Starting worker");
+ const worker = new Worker(window.URL.createObjectURL(blob));
+ worker.onmessage = function(ev){
+ dbg("worker shows signs of life",ev);
+ dbg("Setting pOut async", startTime, Date.now());
+ //wasm.poke32(pOut, nExpect);
+ };
+ }
+ wasm.poke32(pOut, 0);
+ const indy = indirection(pOut);
+ const p = new Promise((ok,nok)=>{
+ while( !indy.next().done );
+ ok();
+ });
+ //indy.next();
+ //indy.next();
+ //indy.next();
+ }
+ })/*async-as-sync experiment*/;
+//#endif
+
////////////////////////////////////////////////////////////////////////
T.g('Hook APIs')
.t({
diff --git a/manifest b/manifest
index b1271a1..f753534 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\skvvfs\svtab\sfor\sinspecting\sthe\sstorage\sstate.\sThis\sis\sfor\stesting\sand\smy\sown\sedification,\snot\spart\sof\sthe\spublic\sAPI.
-D 2025-11-29T16:41:27.823
+C A\sfailed\sexperiment\sin\shiding\sJS\sasync\sbehind\sa\ssync\sinterface.\sIt's\sa\sfraction\sof\sa\shair's\swidth\sfrom\sworking\sbut\scan't\swork\sbecause\sof\sthe\stiming\swhen\sasync\stasks\sget\sthe\schance\sto\srun.\sStashing\sfor\sfuture\scontemplation.
+D 2025-11-29T20:27:42.350
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -604,7 +604,7 @@
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js a2eea6442556867b589e04107796c6e1d04a472219529eeb45b7cd221d7d048b
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 88ce2078267a2d1af57525a32d896295f4a8db7664de0e17e82dc9ff006ed8d3
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js 366596d8ff73d4cefb938bbe95bc839d503c3fab6c8335ce4bf52f0d8a7dee81
-F ext/wasm/api/sqlite3-wasm.c 1d6f8f3486f4f9a21db597f84a015fe9bb7c111652ce6beacdaceb0d162617ff
+F ext/wasm/api/sqlite3-wasm.c c19f1271030cd45d3b36018e03b6f765222d2408b31f5c0f5e92da7aedd8cfa7
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bda1c75bd674a92a0e27cc2f3d46dbbf21e422413f8046814515a0bd7409328a
F ext/wasm/api/sqlite3-worker1.c-pp.js 802d69ead8c38dc1be52c83afbfc77e757da8a91a2e159e7ed3ecda8b8dba2e7
F ext/wasm/c-pp-lite.c f38254fba42561728c2e4764a7ba8d68700091e7c2f4418112868c0daba16783
@@ -646,8 +646,8 @@
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.c-pp.html 0e432ec2c0d99cd470484337066e8d27e7aee4641d97115338f7d962bf7b081a
-F ext/wasm/tester1.c-pp.html 52d88fe2c6f21a046030a36410b4839b632f4424028197a45a3d5669ea724ddb
-F ext/wasm/tester1.c-pp.js 05bb1099472d410b8b5b822af0f362ec565c617eea924d5f53a3b643fc1466d8
+F ext/wasm/tester1.c-pp.html dc583906438f2d309664c39e7e12f2d9c733275e362e7c98f295605a64e25524
+F ext/wasm/tester1.c-pp.js 37855d8f06a687fb101284b42b0c0bd6f74057df7f9d378b1e087b7a883e1cf5
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2180,8 +2180,12 @@
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 0e1a6ca0f1123da680918027b16608bf87593a9d91f7b1f3fc0c3a454185740d
-R 2aee549605fa5886143a182c3a989cec
+P eaff2e8b7f63575e85fb9be800a2c59163e402d6a25fc6a955b9df15afe13b92
+R eee05954a5d93d6f5b89fedeca9b5693
+T *branch * js-async-as-sync
+T *sym-js-async-as-sync *
+T +closed *
+T -sym-kvvfs-v2 *
U stephan
-Z db62e7bb06a82ac76e6e3341ca1c99a3
+Z 8e292bd04ff361d77347b3aa9675c412
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.tags b/manifest.tags
index 4a6dd7d..ba913ce 100644
--- a/manifest.tags
+++ b/manifest.tags
@@ -1,2 +1,2 @@
-branch kvvfs-v2
-tag kvvfs-v2
+branch js-async-as-sync
+tag js-async-as-sync
diff --git a/manifest.uuid b/manifest.uuid
index 9f02113..7b0a846 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-eaff2e8b7f63575e85fb9be800a2c59163e402d6a25fc6a955b9df15afe13b92
+d5753272e4861f664297ac0b81f3da9709bbdc9c67663d53688b12d7a05c68a7