diff options
| author | ruki <[email protected]> | 2025-08-28 22:28:18 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:54 +0800 |
| commit | c316009d37c853c070030823c257d1cbcf94ea48 (patch) | |
| tree | 273f759f75957e3c27e8828e17623d24f713792c /core | |
| parent | c865267f3e781dc208f804efe8fa7f7fde53a064 (diff) | |
fix mutex cdata
Diffstat (limited to 'core')
| -rw-r--r-- | core/src/xmake/thread/mutex_exit.c | 9 | ||||
| -rw-r--r-- | core/src/xmake/thread/mutex_lock.c | 7 | ||||
| -rw-r--r-- | core/src/xmake/thread/mutex_trylock.c | 7 | ||||
| -rw-r--r-- | core/src/xmake/thread/mutex_unlock.c | 7 | ||||
| -rw-r--r-- | core/src/xmake/thread/prefix.h | 8 |
5 files changed, 17 insertions, 21 deletions
diff --git a/core/src/xmake/thread/mutex_exit.c b/core/src/xmake/thread/mutex_exit.c index 43c31c6c7..39d69ab8a 100644 --- a/core/src/xmake/thread/mutex_exit.c +++ b/core/src/xmake/thread/mutex_exit.c @@ -37,13 +37,10 @@ tb_int_t xm_thread_mutex_exit(lua_State* lua) { tb_assert_and_check_return_val(lua, 0); - if (!xm_lua_ispointer(lua, 1)) - return 0; + xm_thread_mutex_t* thread_mutex = xm_thread_mutex_get(lua, 1); + tb_assert_and_check_return_val(thread_mutex && thread_mutex->handle, 0); - xm_thread_mutex_t* thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, 1); - tb_check_return_val(thread_mutex, 0); - - if (thread_mutex && tb_atomic_fetch_and_sub(&thread_mutex->refn, 1) == 1) + if (tb_atomic_fetch_and_sub(&thread_mutex->refn, 1) == 1) { if (thread_mutex->handle) { diff --git a/core/src/xmake/thread/mutex_lock.c b/core/src/xmake/thread/mutex_lock.c index 631dfb4a0..380301da1 100644 --- a/core/src/xmake/thread/mutex_lock.c +++ b/core/src/xmake/thread/mutex_lock.c @@ -37,11 +37,8 @@ tb_int_t xm_thread_mutex_lock(lua_State* lua) { tb_assert_and_check_return_val(lua, 0); - if (!xm_lua_ispointer(lua, 1)) - return 0; - - xm_thread_mutex_t* thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, 1); - tb_check_return_val(thread_mutex && thread_mutex->handle, 0); + xm_thread_mutex_t* thread_mutex = xm_thread_mutex_get(lua, 1); + tb_assert_and_check_return_val(thread_mutex && thread_mutex->handle, 0); lua_pushboolean(lua, tb_mutex_enter(thread_mutex->handle)); return 1; diff --git a/core/src/xmake/thread/mutex_trylock.c b/core/src/xmake/thread/mutex_trylock.c index 3c884b40c..7b83f3a90 100644 --- a/core/src/xmake/thread/mutex_trylock.c +++ b/core/src/xmake/thread/mutex_trylock.c @@ -37,11 +37,8 @@ tb_int_t xm_thread_mutex_trylock(lua_State* lua) { tb_assert_and_check_return_val(lua, 0); - if (!xm_lua_ispointer(lua, 1)) - return 0; - - xm_thread_mutex_t* thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, 1); - tb_check_return_val(thread_mutex && thread_mutex->handle, 0); + xm_thread_mutex_t* thread_mutex = xm_thread_mutex_get(lua, 1); + tb_assert_and_check_return_val(thread_mutex && thread_mutex->handle, 0); lua_pushboolean(lua, tb_mutex_enter_try(thread_mutex->handle)); return 1; diff --git a/core/src/xmake/thread/mutex_unlock.c b/core/src/xmake/thread/mutex_unlock.c index 09887416c..beb0c9e0a 100644 --- a/core/src/xmake/thread/mutex_unlock.c +++ b/core/src/xmake/thread/mutex_unlock.c @@ -37,11 +37,8 @@ tb_int_t xm_thread_mutex_unlock(lua_State* lua) { tb_assert_and_check_return_val(lua, 0); - if (!xm_lua_ispointer(lua, 1)) - return 0; - - xm_thread_mutex_t* thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, 1); - tb_check_return_val(thread_mutex && thread_mutex->handle, 0); + xm_thread_mutex_t* thread_mutex = xm_thread_mutex_get(lua, 1); + tb_assert_and_check_return_val(thread_mutex && thread_mutex->handle, 0); lua_pushboolean(lua, tb_mutex_leave(thread_mutex->handle)); return 1; diff --git a/core/src/xmake/thread/prefix.h b/core/src/xmake/thread/prefix.h index 08eeb73a5..62e1c7729 100644 --- a/core/src/xmake/thread/prefix.h +++ b/core/src/xmake/thread/prefix.h @@ -47,6 +47,14 @@ typedef struct __xm_thread_mutex_t }xm_thread_mutex_t; +// get the thread mutex from arguments +static __tb_inline__ xm_thread_mutex_t* xm_thread_mutex_get(lua_State* lua, tb_int_t index) +{ + xm_thread_mutex_t* thread_mutex = tb_null; + if (xm_lua_isinteger(lua, index)) thread_mutex = (xm_thread_mutex_t*)(tb_size_t)(tb_long_t)lua_tointeger(lua, index); + else if (xm_lua_ispointer(lua, index)) thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, index); + return thread_mutex; +} #endif |
