summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-07-01 10:48:46 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-07-01 12:10:42 +0200
commit327ea702ffcfcf7a8103da5adb2075cd6cfdc5f0 (patch)
treecfc3f879f53b14dcabcb52384399a32fc77ed5f3 /src
parent6edf9bd6b55df0e70fb425e27d1e19ce5970c58e (diff)
downloadjustbuild-327ea702ffcfcf7a8103da5adb2075cd6cfdc5f0.tar.gz
serve target: Fix missing locking of Git CAS in service
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/serve_api/serve_service/target.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp
index 6df2382e..53f0ca87 100644
--- a/src/buildtool/serve_api/serve_service/target.cpp
+++ b/src/buildtool/serve_api/serve_service/target.cpp
@@ -679,6 +679,15 @@ auto TargetService::ServeTargetVariables(
// retrieve content of target file
std::optional<std::string> target_file_content{std::nullopt};
bool tree_found{false};
+ // Get repository lock before inspecting the root git cache
+ auto repo_lock =
+ RepositoryGarbageCollector::SharedLock(*local_context_.storage_config);
+ if (not repo_lock) {
+ auto msg = std::string("Could not acquire repo gc SharedLock");
+ logger_->Emit(LogLevel::Error, msg);
+ return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
+ }
+
// try in local build root Git cache
if (auto res = GetBlobContent(local_context_.storage_config->GitRoot(),
root_tree,