summaryrefslogtreecommitdiffstats
path: root/third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp')
-rw-r--r--third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp b/third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp
index cc6195d84e..d5f0403b6a 100644
--- a/third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp
+++ b/third_party/rlbox_wasm2c_sandbox/include/rlbox_wasm2c_sandbox.hpp
@@ -304,12 +304,13 @@ public:
private:
mutable typename RLBOX_WASM_MODULE_TYPE_CURR::instance_t wasm2c_instance{ 0 };
- struct w2c_env sandbox_memory_env;
- struct w2c_wasi__snapshot__preview1 wasi_env;
+ struct w2c_env sandbox_memory_env{ 0 };
+ struct w2c_wasi__snapshot__preview1 wasi_env{ 0 };
bool instance_initialized = false;
- wasm_rt_memory_t sandbox_memory_info;
- mutable wasm_rt_funcref_table_t sandbox_callback_table;
- uintptr_t heap_base;
+ bool minwasi_init_inst_succeeded = false;
+ wasm_rt_memory_t sandbox_memory_info{ 0 };
+ mutable wasm_rt_funcref_table_t sandbox_callback_table{ 0 };
+ uintptr_t heap_base = 0;
size_t return_slot_size = 0;
T_PointerType return_slot = 0;
mutable std::vector<T_PointerType> callback_free_list;
@@ -505,7 +506,7 @@ public:
FALLIBLE_DYNAMIC_CHECK(
infallible, minwasi_init_succeeded, "Could not initialize min wasi");
- const bool minwasi_init_inst_succeeded = minwasi_init_instance(&wasi_env);
+ minwasi_init_inst_succeeded = minwasi_init_instance(&wasi_env);
FALLIBLE_DYNAMIC_CHECK(
infallible, minwasi_init_inst_succeeded, "Could not initialize min wasi instance");
@@ -567,9 +568,20 @@ public:
RLBOX_WASM_MODULE_TYPE_CURR::free_instance(&wasm2c_instance);
}
- destroy_wasm2c_memory(&sandbox_memory_info);
- wasm_rt_free_funcref_table(&sandbox_callback_table);
- minwasi_cleanup_instance(&wasi_env);
+ if (sandbox_memory_info.data) {
+ destroy_wasm2c_memory(&sandbox_memory_info);
+ sandbox_memory_info.data = nullptr;
+ }
+
+ if (sandbox_callback_table.data) {
+ wasm_rt_free_funcref_table(&sandbox_callback_table);
+ sandbox_callback_table.data = nullptr;
+ }
+
+ if (minwasi_init_inst_succeeded) {
+ minwasi_init_inst_succeeded = false;
+ minwasi_cleanup_instance(&wasi_env);
+ }
}
template<typename T>