summaryrefslogtreecommitdiff
path: root/xmake/core/base/poller.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2026-08-21 21:08:36 +0800
committerGitHub <[email protected]>2026-08-21 21:08:36 +0800
commitdeaabcd162bebe9312201bcaac48404fd8a1925a (patch)
tree74af4b83080958ec5b78f47a860552fd32da11fb /xmake/core/base/poller.lua
parent780159d6946115b89bb4657856fba361e79a1555 (diff)
parent17af88ea7f1887219cca15a1fa7028e06196eccd (diff)
Merge pull request #7722 from xmake-io/coreHEADdev
improve core
Diffstat (limited to 'xmake/core/base/poller.lua')
-rw-r--r--xmake/core/base/poller.lua16
1 files changed, 9 insertions, 7 deletions
diff --git a/xmake/core/base/poller.lua b/xmake/core/base/poller.lua
index bb18dfda4..43c3bea1a 100644
--- a/xmake/core/base/poller.lua
+++ b/xmake/core/base/poller.lua
@@ -124,7 +124,7 @@ function poller:remove(obj)
end
-- remove poller object data
- self:_pollerdata_set(obj, nil)
+ self:_pollerdata_set(obj:cdata(), nil)
return true
end
@@ -153,13 +153,15 @@ function poller:wait(timeout)
local otype = v[1]
local cdata = v[2]
local events = v[3]
- local pollerdata = self:_pollerdata(cdata)
- if not pollerdata then
- return -1, string.format("no object data for cdata(%s)!", cdata)
+ -- this object may have been removed from the poller while its event
+ -- was already collected, e.g. a pending overlapped io on windows,
+ -- we just drop it, it has no owner any more, @see poller:remove()
+ local pollerdata = self:_pollerdata(cdata)
+ if pollerdata then
+ local obj = pollerdata[1]
+ assert(obj and obj:otype() == otype and obj:cdata() == cdata)
+ table.insert(results, {obj, events, pollerdata[2]})
end
- local obj = pollerdata[1]
- assert(obj and obj:otype() == otype and obj:cdata() == cdata)
- table.insert(results, {obj, events, pollerdata[2]})
end
end
return count, results