diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-07-01 10:48:46 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-07-01 12:10:42 +0200 |
commit | 327ea702ffcfcf7a8103da5adb2075cd6cfdc5f0 (patch) | |
tree | cfc3f879f53b14dcabcb52384399a32fc77ed5f3 /src | |
parent | 6edf9bd6b55df0e70fb425e27d1e19ce5970c58e (diff) | |
download | justbuild-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.cpp | 9 |
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, |