diff options
| author | ruki <[email protected]> | 2025-04-28 22:48:18 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:53 +0800 |
| commit | 2088868b56f2c70cd4e9e72803ced3197ceba010 (patch) | |
| tree | c98f345d122d4bdbb5b14c37fa843a18d9b2678c /core/src | |
| parent | c144ca1a86c559af204f0b51c4cf2b2c5afe0d41 (diff) | |
improve thread callback info
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/thread/prefix.h | 1 | ||||
| -rw-r--r-- | core/src/xmake/thread/thread_exit.c | 1 | ||||
| -rw-r--r-- | core/src/xmake/thread/thread_init.c | 24 |
3 files changed, 23 insertions, 3 deletions
diff --git a/core/src/xmake/thread/prefix.h b/core/src/xmake/thread/prefix.h index 061dca962..1199caa7a 100644 --- a/core/src/xmake/thread/prefix.h +++ b/core/src/xmake/thread/prefix.h @@ -34,6 +34,7 @@ typedef struct __xm_thread_t { tb_thread_ref_t handle; + tb_string_t callback; tb_string_t callinfo; }xm_thread_t; diff --git a/core/src/xmake/thread/thread_exit.c b/core/src/xmake/thread/thread_exit.c index 881addbd2..dbdefdf90 100644 --- a/core/src/xmake/thread/thread_exit.c +++ b/core/src/xmake/thread/thread_exit.c @@ -49,6 +49,7 @@ tb_int_t xm_thread_exit(lua_State* lua) // exit thread if (thread) { + tb_string_exit(&thread->callback); tb_string_exit(&thread->callinfo); if (thread->handle) { diff --git a/core/src/xmake/thread/thread_init.c b/core/src/xmake/thread/thread_init.c index 8ed5cf90a..a246a6e53 100644 --- a/core/src/xmake/thread/thread_init.c +++ b/core/src/xmake/thread/thread_init.c @@ -49,10 +49,19 @@ static tb_int_t xm_thread_func(tb_cpointer_t priv) xm_engine_ref_t engine = xm_engine_init(XM_THREAD_ENGINE_NAME, tb_null); if (engine) { - // pass callinfo lua_State* lua = xm_engine_lua(engine); tb_assert(lua); + // pass callback + tb_char_t const* callback_data = tb_string_cstr(&thread->callback); + tb_size_t callback_size = tb_string_size(&thread->callback); + if (callback_data && callback_size) + { + lua_pushlstring(lua, callback_data, callback_size); + lua_setglobal(lua, "_THREAD_CALLBACK"); + } + + // pass callinfo tb_char_t const* callinfo_data = tb_string_cstr(&thread->callinfo); tb_size_t callinfo_size = tb_string_size(&thread->callinfo); if (callinfo_data && callinfo_size) @@ -85,18 +94,26 @@ tb_int_t xm_thread_init(lua_State* lua) // get thread name tb_char_t const* name = luaL_checkstring(lua, 1); + // get callback + size_t callback_size = 0; + tb_char_t const* callback_data = luaL_checklstring(lua, 2, &callback_size); + tb_assert_and_check_break(callback_data && callback_size); + // get callinfo size_t callinfo_size = 0; - tb_char_t const* callinfo_data = luaL_checklstring(lua, 2, &callinfo_size); + tb_char_t const* callinfo_data = luaL_checklstring(lua, 3, &callinfo_size); tb_assert_and_check_break(callinfo_data && callinfo_size); // get stack size - tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 3); + tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 4); // init thread thread = tb_malloc0_type(xm_thread_t); tb_assert_and_check_break(thread); + tb_string_init(&thread->callback); + tb_string_cstrncpy(&thread->callback, callback_data, callback_size); + tb_string_init(&thread->callinfo); tb_string_cstrncpy(&thread->callinfo, callinfo_data, callinfo_size); @@ -113,6 +130,7 @@ tb_int_t xm_thread_init(lua_State* lua) { if (thread) { + tb_string_exit(&thread->callback); tb_string_exit(&thread->callinfo); if (thread->handle) { |
