From 691a82c3a7ce7e5f43a15f8751cacc792efa339f Mon Sep 17 00:00:00 2001 From: ame Date: Mon, 24 Nov 2025 21:19:57 -0600 Subject: better error and better thread:res return --- src/thread.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/thread.c') diff --git a/src/thread.c b/src/thread.c index ee84a65..fbf5f01 100644 --- a/src/thread.c +++ b/src/thread.c @@ -104,11 +104,8 @@ int l_res(lua_State* L){ lua_pushvalue(L, idx); lua_setglobal(L, "_return_table"); - info->done = 1; - pthread_mutex_unlock(&*info->lock); - - pthread_exit(NULL); - p_error("thread did not exit"); + lua_pushstring(L, "res():exit"); + lua_error(L); return 1; } @@ -180,7 +177,12 @@ void* handle_thread(void* _args){ lua_assign_upvalues(L, x); lua_pushvalue(L, res_idx); - lua_call(L, 1, 0); + if(lua_pcall(L, 1, 0, 0) != LUA_OK){ + if(!(lua_type(L, -1) == LUA_TSTRING && strcmp("res():exit", lua_tostring(L, -1)) == 0)){ + lua_error(L); + } + lua_pop(L, 1); + } args->done = 1; pthread_mutex_unlock(&*args->lock); @@ -206,7 +208,6 @@ int _thread_await(lua_State* L){ env_table(L, 0); luaI_jointable(L); - lua_setglobal(L, "_locals"); lua_getglobal(info->L, "_return_table"); -- cgit v1.2.3