diff options
| author | ruki <[email protected]> | 2025-05-07 00:51:50 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:53 +0800 |
| commit | f6c932570613b99b302eb2ed52067fc2a7b1752d (patch) | |
| tree | 779119ee9321c911d23f81a93d9a9a26f94c0d02 /core/src | |
| parent | 1d59427fe0aae9dce1833e5ccee73c583931da7c (diff) | |
improve thread
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/engine_pool.c | 7 | ||||
| -rw-r--r-- | core/src/xmake/engine_pool.h | 4 | ||||
| -rw-r--r-- | core/src/xmake/thread/thread_init.c | 7 |
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; |
