diff options
| author | ruki <[email protected]> | 2025-09-04 23:18:36 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-09-04 22:30:35 +0800 |
| commit | 6b7638a37f0fb73b021d6f04ac51479ab02ce1cd (patch) | |
| tree | 21abb205e370e1a763e711482028f272a435a9e9 /xmake/core/base/thread.lua | |
| parent | 8ffee17dab287bccd050622bfd62b1cac53c8fcd (diff) | |
fix native thread for luajit
Diffstat (limited to 'xmake/core/base/thread.lua')
| -rw-r--r-- | xmake/core/base/thread.lua | 22 |
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 |
