diff options
| author | ruki <[email protected]> | 2025-08-31 21:44:16 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-31 21:44:16 +0800 |
| commit | 310abe223ebdbd712d64b9aae48b7d18c1c03277 (patch) | |
| tree | 3616bffeede4c1349bf1b34a4067dd0309de85b3 /xmake/core/base/thread.lua | |
| parent | 8c691f8b2db73d0df48fd1dd0afb55169969f062 (diff) | |
improve start htrad
Diffstat (limited to 'xmake/core/base/thread.lua')
| -rw-r--r-- | xmake/core/base/thread.lua | 42 |
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 |
