summaryrefslogtreecommitdiff
path: root/xmake/core/base/thread.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-11-08 00:44:35 +0800
committerruki <[email protected]>2025-11-08 00:44:35 +0800
commit45f03066b9738062aaa512de7c1c9f0e7c096ec4 (patch)
treeecf48a18381af6002997f96b4b7bec047993088f /xmake/core/base/thread.lua
parent041d3951b8817b0bc51d1de39b4c7a5da8ba6e36 (diff)
use pipe_event instead of event
Diffstat (limited to 'xmake/core/base/thread.lua')
-rw-r--r--xmake/core/base/thread.lua36
1 files changed, 28 insertions, 8 deletions
diff --git a/xmake/core/base/thread.lua b/xmake/core/base/thread.lua
index 66e6ba2af..26ac672c3 100644
--- a/xmake/core/base/thread.lua
+++ b/xmake/core/base/thread.lua
@@ -28,14 +28,15 @@ local _queue = _queue or {}
local _sharedata = _sharedata or {}
-- load modules
-local io = require("base/io")
-local libc = require("base/libc")
-local pipe = require("base/pipe")
-local bytes = require("base/bytes")
-local table = require("base/table")
-local string = require("base/string")
-local scheduler = require("base/scheduler")
-local sandbox = require("sandbox/sandbox")
+local io = require("base/io")
+local libc = require("base/libc")
+local pipe = require("base/pipe")
+local pipe_event = require("base/private/pipe_event")
+local bytes = require("base/bytes")
+local table = require("base/table")
+local string = require("base/string")
+local scheduler = require("base/scheduler")
+local sandbox = require("sandbox/sandbox")
-- the thread status
thread.STATUS_READY = 1
@@ -810,6 +811,15 @@ function thread._serialize_object(obj)
result.sharedata = true
result.name = obj:name()
result.caddr = libc.dataptr(obj:cdata(), {ffi = false})
+ elseif obj._PIPE_EVENT then
+ local data = obj:_serialize()
+ if not data then
+ return nil
+ end
+ result.pipe_event = true
+ result.ptr = data.ptr
+ result.name = data.name
+ result.caddr = data.ptr
else
return nil
end
@@ -836,6 +846,16 @@ function thread._deserialize_object(data)
return _queue.new(data.name, cdata)
elseif data.sharedata then
return _sharedata.new(data.name, cdata)
+ elseif data.pipe_event then
+ local event = pipe_event.new(data.name)
+ if not event then
+ return nil, "failed to create pipe event"
+ end
+ local ok, errors = event:_deserialize({ptr = data.ptr, name = data.name})
+ if not ok then
+ return nil, errors
+ end
+ return event
end
return nil