summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-09-11 13:26:44 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-09-11 13:27:45 (GMT)
commit6971e816ceafe687973babfa83bb77b9de76b0af (patch)
treea8a842f83537e424ad4efe7136f3ed3e7f1f8049 /Source
parent42556539d7059240738ad469a2a02283c5cab7b3 (diff)
parenta980418f7b46e5ec63e3bd7b3c0e71f5e2b5ffac (diff)
downloadCMake-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.cxx20
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;