summaryrefslogtreecommitdiff
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-12-03 11:25:12 +0100
commitb4ab151739bb7295414375312f7fca3fe7b31e71 (patch)
treee0acd1ad14f075aa3e3e45013ec15921c9f4129e
parent0a8d81cccc994a0b01324d58c01420f26c02116d (diff)
downloadjustbuild-b4ab151739bb7295414375312f7fca3fe7b31e71.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. (cherry-picked from dfb7ad5c7d5dcca13d9728534434079a2b60bdea)
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp5
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.hpp2
2 files changed, 3 insertions, 4 deletions
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index 560d96d3..9fb2dae4 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -17,7 +17,6 @@
#include "src/buildtool/serve_api/serve_service/source_tree.hpp"
#include <algorithm>
-#include <shared_mutex>
#include <thread>
#include "fmt/core.h"
@@ -539,7 +538,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());
@@ -661,7 +660,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());
diff --git a/src/buildtool/serve_api/serve_service/source_tree.hpp b/src/buildtool/serve_api/serve_service/source_tree.hpp
index bf3cd9ef..24ef59c2 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.hpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.hpp
@@ -137,7 +137,7 @@ class SourceTreeService final
ApiBundle const& apis_;
gsl::not_null<LocalContext const*> native_context_;
LocalContext const* compat_context_;
- mutable std::shared_mutex mutex_;
+ mutable std::mutex mutex_;
std::shared_ptr<Logger> logger_{std::make_shared<Logger>("serve-service")};
// symlinks resolver map
ResolveSymlinksMap resolve_symlinks_map_{CreateResolveSymlinksMap()};