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 | |
| parent | c865267f3e781dc208f804efe8fa7f7fde53a064 (diff) | |
fix mutex cdata
| -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 | ||||
| -rw-r--r-- | tests/modules/thread/mutex.lua | 2 | ||||
| -rw-r--r-- | xmake/core/base/thread.lua | 6 |
7 files changed, 20 insertions, 26 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 diff --git a/tests/modules/thread/mutex.lua b/tests/modules/thread/mutex.lua index 0f1954c8a..e969c0747 100644 --- a/tests/modules/thread/mutex.lua +++ b/tests/modules/thread/mutex.lua @@ -7,8 +7,8 @@ function callback(mutex) for i = 1, 10 do mutex:lock() print("%s: %d", thread.running(), i) - os.sleep(1000) mutex:unlock() + os.sleep(1000) end dt = os.mclock() - dt print("%s: end, dt: %d ms", thread.running(), dt) diff --git a/xmake/core/base/thread.lua b/xmake/core/base/thread.lua index e4759372a..1e0551f75 100644 --- a/xmake/core/base/thread.lua +++ b/xmake/core/base/thread.lua @@ -222,11 +222,9 @@ end -- lock file -- --- @param opt the argument option, {shared = true} --- -- @return ok, errors -- -function _mutex:lock(opt) +function _mutex:lock() -- ensure opened local ok, errors = self:_ensure_opened() @@ -235,7 +233,7 @@ function _mutex:lock(opt) end -- lock it - if self._LOCKED_NUM > 0 or thread.mutex_lock(self:cdata(), opt) then + if self._LOCKED_NUM > 0 or thread.mutex_lock(self:cdata()) then self._LOCKED_NUM = self._LOCKED_NUM + 1 return true else |
