@remix_labs/machine-starter 2.3095.0-dev → 2.3099.0-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/common.js CHANGED
@@ -5,18 +5,31 @@ import { MixcoreTauri, filterFFINames } from "./mixcore.lib.mjs";
5
5
  let workers = {};
6
6
  let children = {};
7
7
  let ffiLoops = {};
8
+ let blobs = {};
9
+ let blobsLoops = {};
8
10
 
9
11
  function terminateAll() {
10
12
  console.log("[groovebox-starter] terminate all VMs");
11
13
  for (let [vmID, worker] of Object.entries(workers)) {
12
14
  worker.terminate();
13
15
  };
16
+ for (let [vmID, blobs] of Object.entries(blobs)) {
17
+ for (let blob_url of blobs) {
18
+ console.log("[groovebox-starter] revoke ", blob_url);
19
+ URL.revokeObjectURL(blob_url);
20
+ }
21
+ };
14
22
  for (let ffiLoop of Object.values(ffiLoops)) {
15
23
  ffiLoop.terminate();
16
24
  }
25
+ for (let blobsLoop of Object.values(blobsLoops)) {
26
+ blobsLoop.terminate();
27
+ }
17
28
  workers = {};
18
29
  children = {};
19
30
  ffiLoops = {};
31
+ blobs = {};
32
+ blobsLoops = {};
20
33
  }
21
34
 
22
35
  function terminateVM(vmID) {
@@ -24,12 +37,20 @@ function terminateVM(vmID) {
24
37
  let worker = workers[vmID];
25
38
  if (worker) {
26
39
  let vmChildren = children[vmID];
40
+ let blobList = blobs[vmID] || [];
27
41
  let ffiLoop = ffiLoops[vmID];
42
+ let blobsLoop = blobsLoops[vmID];
28
43
  delete workers[vmID];
29
44
  delete children[vmID];
30
45
  delete ffiLoops[vmID];
46
+ delete blobsLoops[vmID];
31
47
  worker.terminate();
32
48
  ffiLoop.terminate();
49
+ blobsLoop.terminate();
50
+ for (let blob_url of blobList) {
51
+ console.log("[groovebox-starter] revoke ", blob_url);
52
+ URL.revokeObjectURL(blob_url);
53
+ };
33
54
  if (vmChildren) {
34
55
  for (let subID of vmChildren) {
35
56
  terminateVM(subID)
@@ -101,6 +122,7 @@ async function StartWASM2(hub, config) {
101
122
  localFFIkind["$vm_stop"] = vm_kind;
102
123
  localFFIfuns["$vm_stop"] = ffi_vm_stop;
103
124
  ffiLoops[config.vmID] = setupLocalFFIs(hub, config, localFFIfuns);
125
+ blobsLoops[config.vmID] = setupBlobs(hub, config);
104
126
  let config_msg =
105
127
  { "_rmx_type": "msg_vm_configure",
106
128
  "baseURL": config.baseURL,
@@ -322,6 +344,35 @@ async function localFFIsMessageLoop(hub, config, localFFIs, terminate) {
322
344
  }
323
345
  }
324
346
 
347
+ function setupBlobs(hub, config) {
348
+ let vmID = config.vmID;
349
+ let terminate = Promise.withResolvers();
350
+ blobsMessageLoop(hub, config, terminate.promise); // don't wait
351
+ return {terminate: terminate.resolve};
352
+ }
353
+ async function blobsMessageLoop(hub, config, terminate) {
354
+ let vmID = config.vmID;
355
+ let channel = await hub.newChannel();
356
+ let comm = new FFIComm(vmID, hub, channel);
357
+ let sub = await channel.subscribe("/local/" + vmID + "/blobs");
358
+ while (true) {
359
+ let {msg, terminated} = await Promise.race([
360
+ sub.next().then((msg) => ({msg})),
361
+ terminate.then(() => ({terminated: true})),
362
+ ]);
363
+ if (terminated) {
364
+ console.log("[groovebox-starter] terminate blobs loop", vmID);
365
+ return;
366
+ }
367
+ let name = msg.payload.name;
368
+ let url = msg.payload.url;
369
+ let blobList = blobs[vmID];
370
+ if (!blobList) blobList = [];
371
+ blobList.push(url);
372
+ blobs[vmID] = blobList;
373
+ }
374
+ }
375
+
325
376
  class FFIComm {
326
377
  constructor(vmID, hub, channel) {
327
378
  this.vmID = vmID;
@@ -1,2 +1,2 @@
1
- var GROOVEBOX_BUILD = "3444";
1
+ var GROOVEBOX_BUILD = "3449";
2
2
  export { GROOVEBOX_BUILD }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remix_labs/machine-starter",
3
- "version": "2.3095.0-dev",
3
+ "version": "2.3099.0-dev",
4
4
  "description": "start the groove",
5
5
  "main": "node.js",
6
6
  "browser": "index.js",
@@ -11,7 +11,7 @@
11
11
  "author": "Remixlabs staff",
12
12
  "license": "ISC",
13
13
  "dependencies": {
14
- "@remix_labs/hub-client": "2.3095.0-dev",
14
+ "@remix_labs/hub-client": "2.3099.0-dev",
15
15
  "nanoid": "^5.0.2",
16
16
  "web-worker": "^1.2.0"
17
17
  },