Limit the lock context when checking sources and builds

This commit is contained in:
Simon Quigley 2025-02-08 16:43:52 -06:00
parent 8371277873
commit 731bbda848

View File

@ -881,11 +881,10 @@ void PackageConf::sync() {
} }
bool PackageConf::can_check_source_upload() { bool PackageConf::can_check_source_upload() {
std::lock_guard<std::mutex> lock(*task_mutex_);
bool upload_ok = false, source_check_ok = false, source_check_successful = false; bool upload_ok = false, source_check_ok = false, source_check_successful = false;
std::int64_t upload_time = 0, source_check_time = 0; std::int64_t upload_time = 0, source_check_time = 0;
std::int64_t now = std::chrono::duration_cast<std::chrono::milliseconds>( {
std::chrono::system_clock::now().time_since_epoch()).count(); std::lock_guard<std::mutex> lock(*task_mutex_);
for (const auto &kv : jobstatus_task_map_) { for (const auto &kv : jobstatus_task_map_) {
if (kv.first->name == "upload" && kv.second && kv.second->finish_time > 0 && kv.second->successful) { if (kv.first->name == "upload" && kv.second && kv.second->finish_time > 0 && kv.second->successful) {
upload_ok = true; upload_ok = true;
@ -896,6 +895,10 @@ bool PackageConf::can_check_source_upload() {
source_check_time = kv.second->finish_time; source_check_time = kv.second->finish_time;
} }
} }
}
std::int64_t now = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
if (upload_ok && !source_check_ok) return true; if (upload_ok && !source_check_ok) return true;
else if (!upload_ok && source_check_ok) return false; else if (!upload_ok && source_check_ok) return false;
else if (upload_ok && source_check_ok && !source_check_successful && (source_check_time >= (now - (60 * 60 * 1000)))) return true; else if (upload_ok && source_check_ok && !source_check_successful && (source_check_time >= (now - (60 * 60 * 1000)))) return true;
@ -903,11 +906,10 @@ bool PackageConf::can_check_source_upload() {
} }
bool PackageConf::can_check_builds() { bool PackageConf::can_check_builds() {
std::lock_guard<std::mutex> lock(*task_mutex_);
bool source_check_ok = false, build_check_ok = false, build_check_successful; bool source_check_ok = false, build_check_ok = false, build_check_successful;
std::int64_t source_check_time = 0, build_check_time = 0; std::int64_t source_check_time = 0, build_check_time = 0;
std::int64_t now = std::chrono::duration_cast<std::chrono::milliseconds>( {
std::chrono::system_clock::now().time_since_epoch()).count(); std::lock_guard<std::mutex> lock(*task_mutex_);
for (const auto &kv : jobstatus_task_map_) { for (const auto &kv : jobstatus_task_map_) {
if (kv.first->name == "source_check" && kv.second && kv.second->finish_time > 0 && kv.second->successful) { if (kv.first->name == "source_check" && kv.second && kv.second->finish_time > 0 && kv.second->successful) {
source_check_ok = true; source_check_ok = true;
@ -918,6 +920,10 @@ bool PackageConf::can_check_builds() {
build_check_time = kv.second->finish_time; build_check_time = kv.second->finish_time;
} }
} }
}
std::int64_t now = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
if (!build_check_ok && source_check_ok) return true; if (!build_check_ok && source_check_ok) return true;
else if (!build_check_ok && !source_check_ok) return false; else if (!build_check_ok && !source_check_ok) return false;
else if (source_check_ok && build_check_ok && !build_check_successful && (build_check_time >= (now - (4 * 24 * 60 * 60 * 1000)))) return true; else if (source_check_ok && build_check_ok && !build_check_successful && (build_check_time >= (now - (4 * 24 * 60 * 60 * 1000)))) return true;