From c83e55d1319bfa5c3bf8bc56eaa00cf9a0bddc95 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 10 Jun 2022 09:30:03 -0500 Subject: [PATCH] apparently wasm_store_t should be per thread... --- include/onyx_library.h | 4 +++- src/onyx_runtime.c | 6 +++++- src/wasm_runtime.c | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/onyx_library.h b/include/onyx_library.h index d4aae4b4..573de304 100644 --- a/include/onyx_library.h +++ b/include/onyx_library.h @@ -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; diff --git a/src/onyx_runtime.c b/src/onyx_runtime.c index 5c76d47f..5e9cf0c2 100644 --- a/src/onyx_runtime.c +++ b/src/onyx_runtime.c @@ -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; } diff --git a/src/wasm_runtime.c b/src/wasm_runtime.c index c07babf8..28cc229b 100644 --- a/src/wasm_runtime.c +++ b/src/wasm_runtime.c @@ -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"); -- 2.25.1