summaryrefslogtreecommitdiff
path: root/xmake/core/base/thread.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-09-04 23:18:36 +0800
committerruki <[email protected]>2025-09-04 22:30:35 +0800
commit6b7638a37f0fb73b021d6f04ac51479ab02ce1cd (patch)
tree21abb205e370e1a763e711482028f272a435a9e9 /xmake/core/base/thread.lua
parent8ffee17dab287bccd050622bfd62b1cac53c8fcd (diff)
fix native thread for luajit
Diffstat (limited to 'xmake/core/base/thread.lua')
-rw-r--r--xmake/core/base/thread.lua22
1 files changed, 11 insertions, 11 deletions
diff --git a/xmake/core/base/thread.lua b/xmake/core/base/thread.lua
index a53e7bc82..d76f94f64 100644
--- a/xmake/core/base/thread.lua
+++ b/xmake/core/base/thread.lua
@@ -105,19 +105,19 @@ function _thread:start()
-- 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())}
+ arg = {mutex = true, name = arg:name(), caddr = libc.dataptr(arg:cdata(), {ffi = false})}
-- 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())}
+ arg = {event = true, name = arg:name(), caddr = libc.dataptr(arg:cdata(), {ffi = false})}
-- 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())}
+ arg = {semaphore = true, name = arg:name(), caddr = libc.dataptr(arg:cdata(), {ffi = false})}
-- 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())}
+ arg = {queue = true, name = arg:name(), caddr = libc.dataptr(arg:cdata(), {ffi = false})}
-- is sharedata? we can only pass cdata address
elseif arg._SHAREDATA and arg.cdata then
thread.sharedata_incref(arg:cdata())
@@ -134,7 +134,7 @@ function _thread:start()
-- we need a pipe pair to wait and listen thread exit event
local rpipe, wpipe = pipe.openpair("BA") -- rpipe (block)
self._RPIPE = rpipe
- callinfo.wpipe = libc.dataptr(wpipe:cdata())
+ callinfo.wpipe = libc.dataptr(wpipe:cdata(), {ffi = false})
-- we need to suppress gc to free it, because it has been transfer to thread in another lua state instance
wpipe._PIPE = nil
@@ -801,7 +801,7 @@ function thread._run_thread(callback_str, callinfo_str)
if callinfo then
argv = callinfo.argv
threadname = callinfo.name
- wpipe = pipe.new(libc.ptraddr(callinfo.wpipe))
+ wpipe = pipe.new(libc.ptraddr(callinfo.wpipe, {ffi = false}))
end
end
@@ -842,15 +842,15 @@ function thread._run_thread(callback_str, callinfo_str)
local newargv = {}
for _, arg in ipairs(argv) do
if type(arg) == "table" and arg.mutex and arg.caddr then
- arg = _mutex.new(arg.name, libc.ptraddr(arg.caddr))
+ arg = _mutex.new(arg.name, libc.ptraddr(arg.caddr, {ffi = false}))
elseif type(arg) == "table" and arg.event and arg.caddr then
- arg = _event.new(arg.name, libc.ptraddr(arg.caddr))
+ arg = _event.new(arg.name, libc.ptraddr(arg.caddr, {ffi = false}))
elseif type(arg) == "table" and arg.semaphore and arg.caddr then
- arg = _semaphore.new(arg.name, libc.ptraddr(arg.caddr))
+ arg = _semaphore.new(arg.name, libc.ptraddr(arg.caddr, {ffi = false}))
elseif type(arg) == "table" and arg.queue and arg.caddr then
- arg = _queue.new(arg.name, libc.ptraddr(arg.caddr))
+ arg = _queue.new(arg.name, libc.ptraddr(arg.caddr, {ffi = false}))
elseif type(arg) == "table" and arg.sharedata and arg.caddr then
- arg = _sharedata.new(arg.name, libc.ptraddr(arg.caddr))
+ arg = _sharedata.new(arg.name, libc.ptraddr(arg.caddr, {ffi = false}))
end
table.insert(newargv, arg)
end