summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-08-28 22:28:18 +0800
committerruki <[email protected]>2025-08-28 11:35:54 +0800
commitc316009d37c853c070030823c257d1cbcf94ea48 (patch)
tree273f759f75957e3c27e8828e17623d24f713792c
parentc865267f3e781dc208f804efe8fa7f7fde53a064 (diff)
fix mutex cdata
-rw-r--r--core/src/xmake/thread/mutex_exit.c9
-rw-r--r--core/src/xmake/thread/mutex_lock.c7
-rw-r--r--core/src/xmake/thread/mutex_trylock.c7
-rw-r--r--core/src/xmake/thread/mutex_unlock.c7
-rw-r--r--core/src/xmake/thread/prefix.h8
-rw-r--r--tests/modules/thread/mutex.lua2
-rw-r--r--xmake/core/base/thread.lua6
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