]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
A failed experiment in hiding JS async behind a sync interface. It's a fraction of... js-async-as-sync
authorstephan <stephan@noemail.net>
Sat, 29 Nov 2025 20:27:42 +0000 (20:27 +0000)
committerstephan <stephan@noemail.net>
Sat, 29 Nov 2025 20:27:42 +0000 (20:27 +0000)
FossilOrigin-Name: d5753272e4861f664297ac0b81f3da9709bbdc9c67663d53688b12d7a05c68a7

ext/wasm/api/sqlite3-wasm.c
ext/wasm/tester1.c-pp.html
ext/wasm/tester1.c-pp.js
manifest
manifest.tags
manifest.uuid

index a1d7cb07e1de4cde41e2e63947c17dc3e140e9c7..a9def8164d5669086107b70162d1b122eb7eb85d 100644 (file)
@@ -1836,6 +1836,21 @@ int sqlite3__wasm_init_wasmfs(const char *zUnused){
 }
 #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
index 4bb53ee56975b0965db90986f3af8afda6672a8e..364a4af75e5857f9d656cf411024d58058556d63 100644 (file)
     <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>
index b7d4afe15298ea583ce0dbd4f6bed0af155604af..8451bdc051927d9b6af135433f9e34e826c46418 100644 (file)
@@ -140,6 +140,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
     }
     TestUtil.checkHeapSize(true);
   };
+  const debug = (...args)=>{
+    console.debug('tester1',...args);
+  };
   const log = (...args)=>{
     //console.log(...args);
     logClass('',...args);
@@ -3304,6 +3307,70 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
 //#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({
index b1271a14aa7b5ce17b27d8a39e9de6a7fbabdf2a..f753534b6e91cae2838e46eba4f5719e2d2da500 100644 (file)
--- 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-kvvfs.c-pp.js 3f65769166670f2bd044374958f8eeb43b9fae8
 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/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f
 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/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
 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.
index 4a6dd7dc3c21adf01e3cc69089783d3eabffa9f9..ba913ce8056e62c4c550b61744ec9a48043588f8 100644 (file)
@@ -1,2 +1,2 @@
-branch kvvfs-v2
-tag kvvfs-v2
+branch js-async-as-sync
+tag js-async-as-sync
index 9f0211379b2f0477c3210aa58aabe82189f3f8d2..7b0a846d0526f835b6c9640c74f9d5690ad50f93 100644 (file)
@@ -1 +1 @@
-eaff2e8b7f63575e85fb9be800a2c59163e402d6a25fc6a955b9df15afe13b92
+d5753272e4861f664297ac0b81f3da9709bbdc9c67663d53688b12d7a05c68a7