From dfb7ad5c7d5dcca13d9728534434079a2b60bdea Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Wed, 20 Nov 2024 14:24:50 +0100 Subject: Serve service: properly lock git operations against each other ... by using an exclusive lock. A lock of which only ever shared instances are requested has no synchronisation effect. Fix this. --- src/buildtool/serve_api/serve_service/source_tree.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/buildtool/serve_api/serve_service/source_tree.cpp') diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp index 92480919..dfbb04f5 100644 --- a/src/buildtool/serve_api/serve_service/source_tree.cpp +++ b/src/buildtool/serve_api/serve_service/source_tree.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include "fmt/core.h" @@ -552,7 +551,7 @@ auto SourceTreeService::ResolveContentTree( }); { // this is a non-thread-safe Git operation, so it must be guarded! - std::shared_lock slock{mutex_}; + std::unique_lock slock{mutex_}; // open real repository at Git CAS location auto git_repo = GitRepo::Open(native_context_->storage_config->GitRoot()); @@ -674,7 +673,7 @@ auto SourceTreeService::CommonImportToGit( // tag commit and keep it in Git CAS { // this is a non-thread-safe Git operation, so it must be guarded! - std::shared_lock slock{mutex_}; + std::unique_lock slock{mutex_}; // open real repository at Git CAS location auto git_repo = GitRepo::Open(native_context_->storage_config->GitRoot()); -- cgit v1.2.3