Grab cluster->lock when modifying exec_env->module_inst (#2685)
Fixes: https://github.com/bytecodealliance/wasm-micro-runtime/issues/2680 And when switching back to the original module_inst, propagate exception if any. cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/2512
This commit is contained in:
@ -982,7 +982,8 @@ execute_post_instantiate_functions(AOTModuleInstance *module_inst,
|
||||
wasm functions, and ensure that the exec_env's module inst
|
||||
is the correct one. */
|
||||
module_inst_main = exec_env_main->module_inst;
|
||||
exec_env->module_inst = (WASMModuleInstanceCommon *)module_inst;
|
||||
wasm_exec_env_set_module_inst(exec_env,
|
||||
(WASMModuleInstanceCommon *)module_inst);
|
||||
}
|
||||
else {
|
||||
/* Try using the existing exec_env */
|
||||
@ -1007,7 +1008,8 @@ execute_post_instantiate_functions(AOTModuleInstance *module_inst,
|
||||
module inst to ensure that the exec_env's module inst
|
||||
is the correct one. */
|
||||
module_inst_main = exec_env->module_inst;
|
||||
exec_env->module_inst = (WASMModuleInstanceCommon *)module_inst;
|
||||
wasm_exec_env_set_module_inst(
|
||||
exec_env, (WASMModuleInstanceCommon *)module_inst);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1057,12 +1059,12 @@ execute_post_instantiate_functions(AOTModuleInstance *module_inst,
|
||||
fail:
|
||||
if (is_sub_inst) {
|
||||
/* Restore the parent exec_env's module inst */
|
||||
exec_env_main->module_inst = module_inst_main;
|
||||
wasm_exec_env_restore_module_inst(exec_env_main, module_inst_main);
|
||||
}
|
||||
else {
|
||||
if (module_inst_main)
|
||||
/* Restore the existing exec_env's module inst */
|
||||
exec_env->module_inst = module_inst_main;
|
||||
wasm_exec_env_restore_module_inst(exec_env, module_inst_main);
|
||||
if (exec_env_created)
|
||||
wasm_exec_env_destroy(exec_env_created);
|
||||
}
|
||||
@ -1713,7 +1715,8 @@ execute_malloc_function(AOTModuleInstance *module_inst, WASMExecEnv *exec_env,
|
||||
module inst to ensure that the exec_env's module inst
|
||||
is the correct one. */
|
||||
module_inst_old = exec_env->module_inst;
|
||||
exec_env->module_inst = (WASMModuleInstanceCommon *)module_inst;
|
||||
wasm_exec_env_set_module_inst(
|
||||
exec_env, (WASMModuleInstanceCommon *)module_inst);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1724,7 +1727,7 @@ execute_malloc_function(AOTModuleInstance *module_inst, WASMExecEnv *exec_env,
|
||||
|
||||
if (module_inst_old)
|
||||
/* Restore the existing exec_env's module inst */
|
||||
exec_env->module_inst = module_inst_old;
|
||||
wasm_exec_env_restore_module_inst(exec_env, module_inst_old);
|
||||
|
||||
if (exec_env_created)
|
||||
wasm_exec_env_destroy(exec_env_created);
|
||||
@ -1780,7 +1783,8 @@ execute_free_function(AOTModuleInstance *module_inst, WASMExecEnv *exec_env,
|
||||
module inst to ensure that the exec_env's module inst
|
||||
is the correct one. */
|
||||
module_inst_old = exec_env->module_inst;
|
||||
exec_env->module_inst = (WASMModuleInstanceCommon *)module_inst;
|
||||
wasm_exec_env_set_module_inst(
|
||||
exec_env, (WASMModuleInstanceCommon *)module_inst);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1788,7 +1792,7 @@ execute_free_function(AOTModuleInstance *module_inst, WASMExecEnv *exec_env,
|
||||
|
||||
if (module_inst_old)
|
||||
/* Restore the existing exec_env's module inst */
|
||||
exec_env->module_inst = module_inst_old;
|
||||
wasm_exec_env_restore_module_inst(exec_env, module_inst_old);
|
||||
|
||||
if (exec_env_created)
|
||||
wasm_exec_env_destroy(exec_env_created);
|
||||
|
||||
Reference in New Issue
Block a user