summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/serve_service/source_tree.cpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-20 14:24:50 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-20 14:30:46 +0100
commitdfb7ad5c7d5dcca13d9728534434079a2b60bdea (patch)
tree1877539cfcc8d529d611f4e9934344b97fe0cdb9 /src/buildtool/serve_api/serve_service/source_tree.cpp
parent9c3d4539b820b34ca112dedbaf2ed5262c003ace (diff)
downloadjustbuild-dfb7ad5c7d5dcca13d9728534434079a2b60bdea.tar.gz
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.
Diffstat (limited to 'src/buildtool/serve_api/serve_service/source_tree.cpp')
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp5
1 files changed, 2 insertions, 3 deletions
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 <algorithm>
#include <functional>
-#include <shared_mutex>
#include <vector>
#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());