@@ -24,15 +24,19 @@ import {
24
24
import { WorkerBackgroundRefObjectConstructor } from "./worker_background/worker_export.ts" ;
25
25
26
26
type ThreadSpawnerObject = {
27
- share_memory : WebAssembly . Memory ;
27
+ share_memory : {
28
+ [ key : string ] : WebAssembly . Memory ;
29
+ } ;
28
30
wasi_farm_refs_object : Array < WASIFarmRefObject > ;
29
31
worker_url : string ;
30
32
worker_background_ref_object : WorkerBackgroundRefObject ;
31
33
// inst_default_buffer_kept: WebAssembly.Memory;
32
34
} ;
33
35
34
36
export class ThreadSpawner {
35
- private share_memory : WebAssembly . Memory ;
37
+ private share_memory : {
38
+ [ key : string ] : WebAssembly . Memory ;
39
+ } ;
36
40
private wasi_farm_refs_object : Array < WASIFarmRefObject > ;
37
41
private worker_url : string ;
38
42
private worker_background_ref : WorkerBackgroundRef ;
@@ -48,7 +52,9 @@ export class ThreadSpawner {
48
52
constructor (
49
53
worker_url : string ,
50
54
wasi_farm_refs_object : Array < WASIFarmRefObject > ,
51
- share_memory ?: WebAssembly . Memory ,
55
+ share_memory ?: {
56
+ [ key : string ] : WebAssembly . Memory ;
57
+ } ,
52
58
// 16MB for the time being.
53
59
// https://users.rust-lang.org/t/what-is-the-size-limit-of-threads-stack-in-rust/11867/3
54
60
MIN_STACK = 16777216 ,
@@ -60,31 +66,27 @@ export class ThreadSpawner {
60
66
this . worker_url = worker_url ;
61
67
this . wasi_farm_refs_object = wasi_farm_refs_object ;
62
68
63
- const min_initial_size = 1048576 / 65536 ; // Rust's default stack size is 1MB.
64
- const initial_size = MIN_STACK / 65536 ;
65
- if ( initial_size < min_initial_size ) {
66
- throw new Error (
67
- `The stack size must be at least ${ min_initial_size } bytes.` ,
68
- ) ;
69
- }
70
- const max_memory = 1073741824 / 65536 ; // Rust's default maximum memory size is 1GB.
71
-
72
- // this.inst_default_buffer_kept =
73
- // inst_default_buffer_kept ||
74
- // new WebAssembly.Memory({
75
- // initial: 1,
76
- // maximum: max_memory,
77
- // shared: true,
78
- // });
79
-
80
- this . share_memory =
81
- share_memory ||
69
+ if ( share_memory === undefined ) {
70
+ const min_initial_size = 1048576 / 65536 ; // Rust's default stack size is 1MB.
71
+ const initial_size = MIN_STACK / 65536 ;
72
+ if ( initial_size < min_initial_size ) {
73
+ throw new Error (
74
+ `The stack size must be at least ${ min_initial_size } bytes.` ,
75
+ ) ;
76
+ }
77
+ const max_memory = 1073741824 / 65536 ; // Rust's default maximum memory size is 1GB.
78
+
82
79
// WebAssembly.Memory's 1 page is 65536 bytes.
83
- new WebAssembly . Memory ( {
84
- initial : initial_size ,
85
- maximum : max_memory ,
86
- shared : true ,
87
- } ) ;
80
+ share_memory = {
81
+ memory : new WebAssembly . Memory ( {
82
+ initial : initial_size ,
83
+ maximum : max_memory ,
84
+ shared : true ,
85
+ } ) ,
86
+ } ;
87
+ }
88
+
89
+ this . share_memory = share_memory ;
88
90
89
91
if ( worker_background_ref_object === undefined ) {
90
92
let worker_background_worker_url__ : string ;
@@ -246,7 +248,9 @@ export class ThreadSpawner {
246
248
return thread_spawner ;
247
249
}
248
250
249
- get_share_memory ( ) : WebAssembly . Memory {
251
+ get_share_memory ( ) : {
252
+ [ key : string ] : WebAssembly . Memory ;
253
+ } {
250
254
return this . share_memory ;
251
255
}
252
256
@@ -299,7 +303,9 @@ export const thread_spawn_on_worker = async (
299
303
instantiate : (
300
304
thread_spawn_wasm : WebAssembly . Module ,
301
305
imports : {
302
- env : { memory : WebAssembly . Memory } ;
306
+ env : {
307
+ [ key : string ] : WebAssembly . Memory ;
308
+ } ;
303
309
wasi : {
304
310
"thread-spawn" : ( start_arg : number ) => number ;
305
311
} ;
@@ -359,7 +365,7 @@ export const thread_spawn_on_worker = async (
359
365
360
366
const inst = await instantiate ( thread_spawn_wasm , {
361
367
env : {
362
- memory : wasi . get_share_memory ( ) ,
368
+ ... wasi . get_share_memory ( ) ,
363
369
} ,
364
370
wasi : wasi . wasiThreadImport ,
365
371
wasi_snapshot_preview1 : wasi . wasiImport ,
@@ -409,7 +415,7 @@ export const thread_spawn_on_worker = async (
409
415
410
416
const inst = await instantiate ( thread_spawn_wasm , {
411
417
env : {
412
- memory : wasi . get_share_memory ( ) ,
418
+ ... wasi . get_share_memory ( ) ,
413
419
} ,
414
420
wasi : wasi . wasiThreadImport ,
415
421
wasi_snapshot_preview1 : wasi . wasiImport ,
0 commit comments