summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2025-05-07 00:51:50 +0800
committerruki <[email protected]>2025-08-28 11:35:53 +0800
commitf6c932570613b99b302eb2ed52067fc2a7b1752d (patch)
tree779119ee9321c911d23f81a93d9a9a26f94c0d02 /core/src
parent1d59427fe0aae9dce1833e5ccee73c583931da7c (diff)
improve thread
Diffstat (limited to 'core/src')
-rw-r--r--core/src/xmake/engine_pool.c7
-rw-r--r--core/src/xmake/engine_pool.h4
-rw-r--r--core/src/xmake/thread/thread_init.c7
3 files changed, 13 insertions, 5 deletions
diff --git a/core/src/xmake/engine_pool.c b/core/src/xmake/engine_pool.c
index 659b2f99b..0e9d1b8c1 100644
--- a/core/src/xmake/engine_pool.c
+++ b/core/src/xmake/engine_pool.c
@@ -95,10 +95,13 @@ xm_engine_ref_t xm_engine_pool_alloc(xm_engine_pool_ref_t engine_pool)
return engine;
}
-tb_void_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine)
+tb_bool_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine)
{
if (tb_single_list_size(engine_pool) < XM_ENGINE_POOL_MAXN)
+ {
tb_single_list_insert_tail(engine_pool, engine);
- else xm_engine_exit(engine);
+ return tb_true;
+ }
+ return tb_false;
}
diff --git a/core/src/xmake/engine_pool.h b/core/src/xmake/engine_pool.h
index b141345cc..691338369 100644
--- a/core/src/xmake/engine_pool.h
+++ b/core/src/xmake/engine_pool.h
@@ -69,8 +69,10 @@ xm_engine_ref_t xm_engine_pool_alloc(xm_engine_pool_ref_t engine_poo
*
* @param engine_pool the engine_pool
* @param engine the engine
+ *
+ * @return tb_true or tb_false
*/
-tb_void_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine);
+tb_bool_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine);
/* //////////////////////////////////////////////////////////////////////////////////////
* extern
diff --git a/core/src/xmake/thread/thread_init.c b/core/src/xmake/thread/thread_init.c
index a246a6e53..09d7771f0 100644
--- a/core/src/xmake/thread/thread_init.c
+++ b/core/src/xmake/thread/thread_init.c
@@ -30,6 +30,7 @@
*/
#include "prefix.h"
#include "../engine.h"
+#include "../engine_pool.h"
/* //////////////////////////////////////////////////////////////////////////////////////
* macros
@@ -46,7 +47,8 @@ static tb_int_t xm_thread_func(tb_cpointer_t priv)
tb_assert_and_check_return_val(thread, 0);
tb_trace_i("thread: start ..");
- xm_engine_ref_t engine = xm_engine_init(XM_THREAD_ENGINE_NAME, tb_null);
+ xm_engine_ref_t engine = xm_engine_pool_alloc(xm_engine_pool());
+ if (!engine) engine = xm_engine_init(XM_THREAD_ENGINE_NAME, tb_null);
if (engine)
{
lua_State* lua = xm_engine_lua(engine);
@@ -73,7 +75,8 @@ static tb_int_t xm_thread_func(tb_cpointer_t priv)
// start engine
tb_char_t* argv[] = {XM_THREAD_ENGINE_NAME, tb_null};
xm_engine_main(engine, 1, argv, tb_null);
- xm_engine_exit(engine);
+ if (!xm_engine_pool_free(xm_engine_pool(), engine))
+ xm_engine_exit(engine);
}
tb_trace_i("thread: end");
return 0;