summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2025-04-28 22:48:18 +0800
committerruki <[email protected]>2025-08-28 11:35:53 +0800
commit2088868b56f2c70cd4e9e72803ced3197ceba010 (patch)
treec98f345d122d4bdbb5b14c37fa843a18d9b2678c /core/src
parentc144ca1a86c559af204f0b51c4cf2b2c5afe0d41 (diff)
improve thread callback info
Diffstat (limited to 'core/src')
-rw-r--r--core/src/xmake/thread/prefix.h1
-rw-r--r--core/src/xmake/thread/thread_exit.c1
-rw-r--r--core/src/xmake/thread/thread_init.c24
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)
{