diff --git a/cpp/ci_database_objs.cpp b/cpp/ci_database_objs.cpp index e8f6800..881db2e 100644 --- a/cpp/ci_database_objs.cpp +++ b/cpp/ci_database_objs.cpp @@ -735,6 +735,10 @@ void PackageConf::assign_task(std::shared_ptr jobstatus, std::shared_ jobstatus_task_map_[jobstatus] = task_ptr; } +void PackageConf::clear_tasks() { + std::lock_guard lock(*task_mutex_); + jobstatus_task_map_.clear(); +} bool PackageConf::set_package_confs() { // Fetch current PackageConf entries from the database diff --git a/cpp/ci_database_objs.h b/cpp/ci_database_objs.h index dc31ca4..c6fabcd 100644 --- a/cpp/ci_database_objs.h +++ b/cpp/ci_database_objs.h @@ -161,6 +161,7 @@ public: std::vector> get_package_confs_by_package_name(std::vector> packageconfs, const std::string& package_name); void assign_task(std::shared_ptr jobstatus, std::shared_ptr task_ptr, std::weak_ptr packageconf_ptr); + void clear_tasks(); int successful_task_count(); int successful_or_pending_task_count(); int successful_or_queued_task_count(); diff --git a/cpp/web_server.cpp b/cpp/web_server.cpp index cbea575..81290b4 100644 --- a/cpp/web_server.cpp +++ b/cpp/web_server.cpp @@ -735,9 +735,11 @@ bool WebServer::start_server(quint16 port) { return std::stoi(s); }) ); + auto pkgconfs = lubuntuci->cilogic.get_packageconfs_by_ids(repos); + for (auto pkgconf : pkgconfs) pkgconf->clear_tasks(); - std::string msg = lubuntuci->cilogic.queue_pull_tarball(lubuntuci->cilogic.get_packageconfs_by_ids(repos), task_queue, job_statuses); - msg += lubuntuci->cilogic.queue_build_upload(lubuntuci->cilogic.get_packageconfs_by_ids(repos), task_queue, job_statuses); + std::string msg = lubuntuci->cilogic.queue_pull_tarball(pkgconfs, task_queue, job_statuses); + msg += lubuntuci->cilogic.queue_build_upload(pkgconfs, task_queue, job_statuses); return QHttpServerResponse("text/html", QByteArray(msg.c_str(), (int)msg.size())); }); }); @@ -781,6 +783,7 @@ bool WebServer::start_server(quint16 port) { if (session_response.statusCode() == StatusCodeFound) return QtConcurrent::run([response = std::move(session_response)]() mutable { return std::move(response); }); } return QtConcurrent::run([=, this]() { + for (auto pkgconf : all_repos) pkgconf->clear_tasks(); std::string msg = lubuntuci->cilogic.queue_pull_tarball(all_repos, task_queue, job_statuses); msg += lubuntuci->cilogic.queue_build_upload(all_repos, task_queue, job_statuses);