diff options
| author | ruki <[email protected]> | 2022-04-03 13:40:24 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-03 13:40:24 +0800 |
| commit | cd159c7c62fb2746f85484fa813628598d068072 (patch) | |
| tree | c2f5ff7bc12550f9650890080826b46f542a1ff1 /xmake/modules/private/async | |
| parent | fa972ccbdda55a44ae8f245f727e410fc9e179e9 (diff) | |
improve c++ modules and jobpool
Diffstat (limited to 'xmake/modules/private/async')
| -rw-r--r-- | xmake/modules/private/async/jobpool.lua | 11 |
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 |
