apparently wasm_store_t should be per thread...
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 10 Jun 2022 14:30:03 +0000 (09:30 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 10 Jun 2022 14:30:03 +0000 (09:30 -0500)
include/onyx_library.h
src/onyx_runtime.c
src/wasm_runtime.c

index d4aae4b4fd7415117d11ca10fb0a2c3d55e21db8..573de3040ed5f893642b27e0529a68ade9dd4625 100644 (file)
@@ -15,7 +15,7 @@ typedef struct OnyxRuntime {
     wasm_instance_t* wasm_instance;
     wasm_module_t* wasm_module;
     wasm_memory_t* wasm_memory;
-    wasm_store_t*  wasm_store;
+    wasm_engine_t *wasm_engine;
     wasm_extern_vec_t wasm_imports;
 
     int argc;
@@ -32,6 +32,8 @@ typedef struct OnyxRuntime {
     wasm_trap_t* (*wasm_func_call)(const wasm_func_t* wasm_func, const wasm_val_vec_t* args, wasm_val_vec_t* results);
     wasm_instance_t* (*wasm_instance_new)(wasm_store_t* store, const wasm_module_t* module, const wasm_extern_vec_t* imports, wasm_trap_t** traps);
     void (*onyx_print_trap)(wasm_trap_t* trap);
+    wasm_store_t *(*wasm_store_new)(wasm_engine_t *engine);
+    void (*wasm_store_delete)(wasm_store_t *store);
 } OnyxRuntime;
 
 OnyxRuntime* runtime;
index 5c76d47fedf3a3677e54efdfa11062a66527f6df..5e9cf0c23d52708fb8c3109cc1c80665b9c8170a 100644 (file)
@@ -415,8 +415,10 @@ static i32 onyx_run_thread(void *data) {
 #endif
     OnyxThread *thread = (OnyxThread *) data;
 
+    wasm_store_t *wasm_store = runtime->wasm_store_new(runtime->wasm_engine);
+
     wasm_trap_t* traps = NULL;
-    thread->instance = runtime->wasm_instance_new(runtime->wasm_store, runtime->wasm_module, &runtime->wasm_imports, &traps);
+    thread->instance = runtime->wasm_instance_new(wasm_store, runtime->wasm_module, &runtime->wasm_imports, &traps);
 
     wasm_extern_t* start_extern = runtime->wasm_extern_lookup_by_name(runtime->wasm_module, thread->instance, "_thread_start");
     wasm_func_t*   start_func   = runtime->wasm_extern_as_func(start_extern);
@@ -452,6 +454,8 @@ static i32 onyx_run_thread(void *data) {
         trap = runtime->wasm_func_call(exit_func, &args_array, &results);
     }
 
+    runtime->wasm_store_delete(wasm_store);
+
     return 0;
 }
 
index c07babf85cf73391269d74b9083c2ca6025f5c55..28cc229b46d6ea76194bcbe4579d8cbd377d8ee7 100644 (file)
@@ -332,7 +332,7 @@ b32 onyx_run_wasm(bh_buffer wasm_bytes, int argc, char *argv[]) {
     wasm_runtime.wasm_instance = wasm_instance;
     wasm_runtime.wasm_module = wasm_module;
     wasm_runtime.wasm_memory = wasm_memory;
-    wasm_runtime.wasm_store = wasm_store;
+    wasm_runtime.wasm_engine = wasm_engine;
     wasm_runtime.wasm_imports = wasm_imports;
     
     wasm_runtime.argc = argc;
@@ -344,6 +344,8 @@ b32 onyx_run_wasm(bh_buffer wasm_bytes, int argc, char *argv[]) {
     wasm_runtime.wasm_extern_as_func = &wasm_extern_as_func;
     wasm_runtime.wasm_func_call = &wasm_func_call;
     wasm_runtime.wasm_instance_new = &wasm_instance_new;
+    wasm_runtime.wasm_store_new = &wasm_store_new;
+    wasm_runtime.wasm_store_delete = &wasm_store_delete;
     wasm_runtime.onyx_print_trap = &onyx_print_trap;
 
     wasm_extern_t* start_extern = wasm_extern_lookup_by_name(wasm_module, wasm_instance, "_start");