summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@yahooinc.com>2022-05-20 14:21:30 +0000
committerHåvard Pettersen <havardpe@yahooinc.com>2022-05-20 14:21:30 +0000
commit1a3702e845352a85c96d3c1bde1353936595143f (patch)
tree1d9cacacd520e4dd4ab7164f504a7e42ef991e24
parentb13e6071410d51b31b956cf4c856d21334d9fd41 (diff)
hold lock while modifying merge states map
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
index 0f897d753f6..cfcc32a76e5 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
@@ -173,8 +173,13 @@ FileStorHandlerImpl::flush(bool killPendingMerges)
LOG(debug, "All queues and bucket locks released.");
if (killPendingMerges) {
+ std::map<document::Bucket, std::shared_ptr<MergeStatus>> my_merge_states;
+ {
+ std::lock_guard mergeGuard(_mergeStatesLock);
+ std::swap(_mergeStates, my_merge_states);
+ }
api::ReturnCode code(api::ReturnCode::ABORTED, "Storage node is shutting down");
- for (auto & entry : _mergeStates) {
+ for (auto & entry : my_merge_states) {
MergeStatus& s(*entry.second);
if (s.pendingGetDiff) {
s.pendingGetDiff->setResult(code);
@@ -189,7 +194,6 @@ FileStorHandlerImpl::flush(bool killPendingMerges)
_messageSender.sendReply(s.reply);
}
}
- _mergeStates.clear();
}
}