summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2025-04-18 22:42:48 +0800
committerruki <[email protected]>2025-08-28 11:35:53 +0800
commitad77d170e407fc7d346df32a88683aae050bf36b (patch)
treee1ae2f06dc31a84ae42b4dd6086cb570ef88b95b /core/src
parent6eccd1efa540d634e35eb29cf923025e0667aa0c (diff)
run thread
Diffstat (limited to 'core/src')
-rw-r--r--core/src/xmake/thread/prefix.h3
-rw-r--r--core/src/xmake/thread/thread_exit.c3
-rw-r--r--core/src/xmake/thread/thread_init.c40
3 files changed, 23 insertions, 23 deletions
diff --git a/core/src/xmake/thread/prefix.h b/core/src/xmake/thread/prefix.h
index 6ce15073b..061dca962 100644
--- a/core/src/xmake/thread/prefix.h
+++ b/core/src/xmake/thread/prefix.h
@@ -34,8 +34,7 @@
typedef struct __xm_thread_t
{
tb_thread_ref_t handle;
- tb_string_t callback;
- tb_string_t argv;
+ 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 023d6afa7..881addbd2 100644
--- a/core/src/xmake/thread/thread_exit.c
+++ b/core/src/xmake/thread/thread_exit.c
@@ -49,8 +49,7 @@ tb_int_t xm_thread_exit(lua_State* lua)
// exit thread
if (thread)
{
- tb_string_exit(&thread->callback);
- tb_string_exit(&thread->argv);
+ tb_string_exit(&thread->callinfo);
if (thread->handle)
{
tb_thread_exit(thread->handle);
diff --git a/core/src/xmake/thread/thread_init.c b/core/src/xmake/thread/thread_init.c
index c33e13702..8ed5cf90a 100644
--- a/core/src/xmake/thread/thread_init.c
+++ b/core/src/xmake/thread/thread_init.c
@@ -49,10 +49,21 @@ 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)
{
- tb_char_t* taskargv[] = {"lua", (tb_char_t*)tb_string_cstr(&thread->callback), tb_null};
+ // pass callinfo
+ lua_State* lua = xm_engine_lua(engine);
+ tb_assert(lua);
+ 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)
+ {
+ lua_pushlstring(lua, callinfo_data, callinfo_size);
+ lua_setglobal(lua, "_THREAD_CALLINFO");
+ }
+
+ // start engine
tb_char_t* argv[] = {XM_THREAD_ENGINE_NAME, tb_null};
- xm_engine_main(engine, 1, argv, taskargv);
+ xm_engine_main(engine, 1, argv, tb_null);
xm_engine_exit(engine);
}
tb_trace_i("thread: end");
@@ -74,28 +85,20 @@ 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 argv
- size_t argv_size = 0;
- tb_char_t const* argv_data = luaL_checklstring(lua, 3, &argv_size);
- tb_assert_and_check_break(argv_data && argv_size);
+ // get callinfo
+ size_t callinfo_size = 0;
+ tb_char_t const* callinfo_data = luaL_checklstring(lua, 2, &callinfo_size);
+ tb_assert_and_check_break(callinfo_data && callinfo_size);
// get stack size
- tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 4);
+ tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 3);
// 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->argv);
- tb_string_cstrncpy(&thread->argv, argv_data, argv_size);
+ tb_string_init(&thread->callinfo);
+ tb_string_cstrncpy(&thread->callinfo, callinfo_data, callinfo_size);
// create and start thread
thread->handle = tb_thread_init(name, xm_thread_func, thread, stacksize);
@@ -110,8 +113,7 @@ tb_int_t xm_thread_init(lua_State* lua)
{
if (thread)
{
- tb_string_exit(&thread->callback);
- tb_string_exit(&thread->argv);
+ tb_string_exit(&thread->callinfo);
if (thread->handle)
{
tb_thread_exit(thread->handle);