diff options
author | Brad King <brad.king@kitware.com> | 2024-09-11 13:26:44 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-09-11 13:27:45 (GMT) |
commit | 6971e816ceafe687973babfa83bb77b9de76b0af (patch) | |
tree | a8a842f83537e424ad4efe7136f3ed3e7f1f8049 /Source | |
parent | 42556539d7059240738ad469a2a02283c5cab7b3 (diff) | |
parent | a980418f7b46e5ec63e3bd7b3c0e71f5e2b5ffac (diff) | |
download | CMake-6971e816ceafe687973babfa83bb77b9de76b0af.zip CMake-6971e816ceafe687973babfa83bb77b9de76b0af.tar.gz CMake-6971e816ceafe687973babfa83bb77b9de76b0af.tar.bz2 |
Merge topic 'parallel-install-bugfix'
a980418f7b cmake --install: Fix concurrency level of parallel install
Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !9802
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmInstallScriptHandler.cxx | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/Source/cmInstallScriptHandler.cxx b/Source/cmInstallScriptHandler.cxx index 353deee..9a4e70f 100644 --- a/Source/cmInstallScriptHandler.cxx +++ b/Source/cmInstallScriptHandler.cxx @@ -80,17 +80,23 @@ int cmInstallScriptHandler::install(unsigned int j) std::size_t installed = 0; std::size_t i = 0; - while (installed < scripts.size()) { + std::function<void()> queueScripts; + queueScripts = [&scripts, &working, &installed, &i, &loop, j, + &queueScripts]() { for (auto queue = std::min(j - working, scripts.size() - i); queue > 0; --queue) { - scripts[i].start(loop, [&scripts, &working, &installed, i]() { - scripts[i].printResult(++installed, scripts.size()); - --working; - }); + ++working; + scripts[i].start(loop, + [&scripts, &working, &installed, i, &queueScripts]() { + scripts[i].printResult(++installed, scripts.size()); + --working; + queueScripts(); + }); ++i; } - uv_run(loop, UV_RUN_DEFAULT); - } + }; + queueScripts(); + uv_run(loop, UV_RUN_DEFAULT); // Write install manifest std::string install_manifest; |