summaryrefslogtreecommitdiff
path: root/xmake/core/base/thread.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-08-31 21:44:16 +0800
committerruki <[email protected]>2025-08-31 21:44:16 +0800
commit310abe223ebdbd712d64b9aae48b7d18c1c03277 (patch)
tree3616bffeede4c1349bf1b34a4067dd0309de85b3 /xmake/core/base/thread.lua
parent8c691f8b2db73d0df48fd1dd0afb55169969f062 (diff)
improve start htrad
Diffstat (limited to 'xmake/core/base/thread.lua')
-rw-r--r--xmake/core/base/thread.lua42
1 files changed, 22 insertions, 20 deletions
diff --git a/xmake/core/base/thread.lua b/xmake/core/base/thread.lua
index 950712de2..a53e7bc82 100644
--- a/xmake/core/base/thread.lua
+++ b/xmake/core/base/thread.lua
@@ -101,26 +101,28 @@ function _thread:start()
-- translate arguments (mutex, ...)
local argv = {}
for _, arg in ipairs(self._ARGV) do
- -- is mutex? we can only pass cdata address
- if type(arg) == "table" and arg._MUTEX and arg.cdata then
- thread.mutex_incref(arg:cdata())
- arg = {mutex = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
- -- is event? we can only pass cdata address
- elseif type(arg) == "table" and arg._EVENT and arg.cdata then
- thread.event_incref(arg:cdata())
- arg = {event = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
- -- is semaphore? we can only pass cdata address
- elseif type(arg) == "table" and arg._SEMAPHORE and arg.cdata then
- thread.semaphore_incref(arg:cdata())
- arg = {semaphore = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
- -- is queue? we can only pass cdata address
- elseif type(arg) == "table" and arg._QUEUE and arg.cdata then
- thread.queue_incref(arg:cdata())
- arg = {queue = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
- -- is sharedata? we can only pass cdata address
- elseif type(arg) == "table" and arg._SHAREDATA and arg.cdata then
- thread.sharedata_incref(arg:cdata())
- arg = {sharedata = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ if type(arg) == "table" then
+ -- is mutex? we can only pass cdata address
+ if arg._MUTEX and arg.cdata then
+ thread.mutex_incref(arg:cdata())
+ arg = {mutex = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ -- is event? we can only pass cdata address
+ elseif arg._EVENT and arg.cdata then
+ thread.event_incref(arg:cdata())
+ arg = {event = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ -- is semaphore? we can only pass cdata address
+ elseif arg._SEMAPHORE and arg.cdata then
+ thread.semaphore_incref(arg:cdata())
+ arg = {semaphore = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ -- is queue? we can only pass cdata address
+ elseif arg._QUEUE and arg.cdata then
+ thread.queue_incref(arg:cdata())
+ arg = {queue = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ -- is sharedata? we can only pass cdata address
+ elseif arg._SHAREDATA and arg.cdata then
+ thread.sharedata_incref(arg:cdata())
+ arg = {sharedata = true, name = arg:name(), caddr = libc.dataptr(arg:cdata())}
+ end
end
table.insert(argv, arg)
end