Use futures for queuing pull and tarball tasks

main
Simon Quigley 2 weeks ago
parent 406fddb27b
commit 8af3fe19b4

@ -639,7 +639,11 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
std::mutex task_assignment_mutex; std::mutex task_assignment_mutex;
try { try {
std::vector<std::future<void>> futures;
for (auto &r : repos) { for (auto &r : repos) {
futures.push_back(std::async(std::launch::async, [this, &task_queue, &job_statuses,
&encountered_items, &task_assignment_mutex,
&r]() mutable {
{ {
std::lock_guard<std::mutex> lock(task_assignment_mutex); std::lock_guard<std::mutex> lock(task_assignment_mutex);
auto found_it = encountered_items.find(r->package->name); auto found_it = encountered_items.find(r->package->name);
@ -655,7 +659,7 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
r->packaging_commit = existing_item->first_pkgconf->packaging_commit; r->packaging_commit = existing_item->first_pkgconf->packaging_commit;
r->upstream_commit = existing_item->first_pkgconf->upstream_commit; r->upstream_commit = existing_item->first_pkgconf->upstream_commit;
r->sync(); r->sync();
continue; return;
} }
} }
// REAL pull // REAL pull
@ -692,7 +696,9 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
new_item->first_tarball_task = r->get_task_by_jobstatus(job_statuses->at("tarball")); new_item->first_tarball_task = r->get_task_by_jobstatus(job_statuses->at("tarball"));
encountered_items[r->package->name] = new_item; encountered_items[r->package->name] = new_item;
} }
}));
} }
for (auto& future : futures) future.get();
msg = "Succeeded"; msg = "Succeeded";
} catch (...) { } catch (...) {
msg = "Failed"; msg = "Failed";

Loading…
Cancel
Save