summaryrefslogtreecommitdiff
path: root/xmake/modules/private/async
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-03 13:40:24 +0800
committerruki <[email protected]>2022-04-03 13:40:24 +0800
commitcd159c7c62fb2746f85484fa813628598d068072 (patch)
treec2f5ff7bc12550f9650890080826b46f542a1ff1 /xmake/modules/private/async
parentfa972ccbdda55a44ae8f245f727e410fc9e179e9 (diff)
improve c++ modules and jobpool
Diffstat (limited to 'xmake/modules/private/async')
-rw-r--r--xmake/modules/private/async/jobpool.lua11
1 files changed, 7 insertions, 4 deletions
diff --git a/xmake/modules/private/async/jobpool.lua b/xmake/modules/private/async/jobpool.lua
index f7eef0c1b..458b8802d 100644
--- a/xmake/modules/private/async/jobpool.lua
+++ b/xmake/modules/private/async/jobpool.lua
@@ -23,7 +23,7 @@ import("core.base.object")
import("core.base.hashset")
-- define module
-local jobpool = jobpool or object {_init = {"_size", "_rootjob", "_leafjobs"}}
+local jobpool = jobpool or object {_init = {"_size", "_rootjob", "_leafjobs", "_poprefs"}}
-- get jobs size
function jobpool:size()
@@ -128,13 +128,16 @@ function jobpool:pop()
end
end
- -- is group node?
- if job.group then
+ -- is group node or referenced node (it has been popped once) ?
+ local poprefs = self._poprefs
+ local jobkey = tostring(job)
+ if job.group or poprefs[jobkey] then
-- pop the next real job
return self:pop()
else
-- pop this job
self._size = self._size - 1
+ poprefs[jobkey] = true
return job, priority
end
end
@@ -214,5 +217,5 @@ end
-- new a jobpool
function new()
- return jobpool {0, {name = "root"}, {}}
+ return jobpool {0, {name = "root"}, {}, {}}
end