mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-11 09:25:20 +00:00
Do not inherit WASM_SUSPEND_FLAG_BLOCKING from the parent thread (#3051)
It seems that some users want to wrap rather large chunk of code with wasm_runtime_begin_blocking_op/wasm_runtime_end_blocking_op. If the wrapped code happens to have a call to e.g. wasm_runtime_spawn_exec_env, WASM_SUSPEND_FLAG_BLOCKING is inherited to the child exec_env and it may cause unexpected behaviors.
This commit is contained in:
parent
9bcf6b4dd3
commit
8b37048823
|
@ -35,6 +35,8 @@ typedef union WASMSuspendFlags {
|
|||
#define WASM_SUSPEND_FLAGS_FETCH_AND(s_flags, val) \
|
||||
BH_ATOMIC_32_FETCH_AND(s_flags.flags, val)
|
||||
|
||||
#define WASM_SUSPEND_FLAG_INHERIT_MASK (~WASM_SUSPEND_FLAG_BLOCKING)
|
||||
|
||||
#if WASM_SUSPEND_FLAGS_IS_ATOMIC != 0
|
||||
#define WASM_SUSPEND_FLAGS_LOCK(lock) (void)0
|
||||
#define WASM_SUSPEND_FLAGS_UNLOCK(lock) (void)0
|
||||
|
|
|
@ -574,7 +574,8 @@ wasm_cluster_spawn_exec_env(WASMExecEnv *exec_env)
|
|||
}
|
||||
|
||||
/* Inherit suspend_flags of parent thread */
|
||||
new_exec_env->suspend_flags.flags = exec_env->suspend_flags.flags;
|
||||
new_exec_env->suspend_flags.flags =
|
||||
(exec_env->suspend_flags.flags & WASM_SUSPEND_FLAG_INHERIT_MASK);
|
||||
|
||||
if (!wasm_cluster_add_exec_env(cluster, new_exec_env)) {
|
||||
goto fail4;
|
||||
|
@ -729,7 +730,8 @@ wasm_cluster_create_thread(WASMExecEnv *exec_env,
|
|||
}
|
||||
|
||||
/* Inherit suspend_flags of parent thread */
|
||||
new_exec_env->suspend_flags.flags = exec_env->suspend_flags.flags;
|
||||
new_exec_env->suspend_flags.flags =
|
||||
(exec_env->suspend_flags.flags & WASM_SUSPEND_FLAG_INHERIT_MASK);
|
||||
|
||||
if (!wasm_cluster_add_exec_env(cluster, new_exec_env))
|
||||
goto fail2;
|
||||
|
|
Loading…
Reference in New Issue
Block a user