diff --git a/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c b/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c index 0eaed87b..b3ebaf2f 100644 --- a/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c +++ b/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c @@ -112,7 +112,7 @@ typedef struct { /* table elem index of the app's entry function */ uint32 elem_index; /* arg of the app's entry function */ - void *arg; + uint32 arg; wasm_module_inst_t module_inst; } ThreadRoutineArgs; @@ -479,17 +479,8 @@ pthread_start_routine(void *arg) os_cond_signal(&parent_exec_env->wait_cond); os_mutex_unlock(&parent_exec_env->wait_lock); - if (!validate_native_addr(routine_args->arg, sizeof(uint32))) { - /* If there are exceptions, copy the exception to - all other instance in this cluster */ - wasm_cluster_spread_exception(exec_env); - wasm_runtime_deinstantiate_internal(module_inst, true); - delete_thread_info_node(info_node); - return NULL; - } - wasm_exec_env_set_thread_info(exec_env); - argv[0] = addr_native_to_app(routine_args->arg); + argv[0] = routine_args->arg; if(!wasm_runtime_call_indirect(exec_env, routine_args->elem_index, @@ -532,7 +523,7 @@ pthread_create_wrapper(wasm_exec_env_t exec_env, uint32 *thread, /* thread_handle */ const void *attr, /* not supported */ uint32 elem_index, /* entry function */ - void *arg) /* arguments buffer */ + uint32 arg) /* arguments buffer */ { wasm_module_t module = get_module(exec_env); wasm_module_inst_t module_inst = get_module_inst(exec_env); @@ -1066,7 +1057,7 @@ posix_memalign_wrapper(wasm_exec_env_t exec_env, { #func_name, func_name##_wrapper, signature, NULL } static NativeSymbol native_symbols_lib_pthread[] = { - REG_NATIVE_FUNC(pthread_create, "(**i*)i"), + REG_NATIVE_FUNC(pthread_create, "(**ii)i"), REG_NATIVE_FUNC(pthread_join, "(ii)i"), REG_NATIVE_FUNC(pthread_detach, "(i)i"), REG_NATIVE_FUNC(pthread_cancel, "(i)i"),