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;
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;
#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);
trap = runtime->wasm_func_call(exit_func, &args_array, &results);
}
+ runtime->wasm_store_delete(wasm_store);
+
return 0;
}
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;
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");