summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@verizonmedia.com>2019-09-24 14:43:45 +0000
committerTor Brede Vekterli <vekterli@verizonmedia.com>2019-09-27 09:10:32 +0000
commit7295ea63246d69dc0b4c434c6f1773b8b5f8b5c4 (patch)
tree4e1a8b6d17370a01da1d651f3a1473abbf8c8d59 /storage
parent1692827e9aadba4581a9b56cdb691a2990080318 (diff)
Add memory load-fences that match existing corresponding store-fences
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp b/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp
index c3ade3c2877..66d44a655e0 100644
--- a/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp
+++ b/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp
@@ -148,7 +148,9 @@ Entry BTreeBucketDatabase::entry_from_iterator(const BTree::ConstIterator& iter)
if (!iter.valid()) {
return Entry::createInvalid();
}
- return entry_from_value(iter.getKey(), iter.getData());
+ const auto value = iter.getData();
+ std::atomic_thread_fence(std::memory_order_acquire);
+ return entry_from_value(iter.getKey(), value);
}
ConstEntryRef BTreeBucketDatabase::const_entry_ref_from_iterator(const BTree::ConstIterator& iter) const {
@@ -156,6 +158,7 @@ ConstEntryRef BTreeBucketDatabase::const_entry_ref_from_iterator(const BTree::Co
return ConstEntryRef::createInvalid();
}
const auto value = iter.getData();
+ std::atomic_thread_fence(std::memory_order_acquire);
const auto replicas_ref = _store.get(entry_ref_from_value(value));
const auto bucket = BucketId(BucketId::keyToBucketId(iter.getKey()));
return const_entry_ref_from_replica_array_ref(bucket, gc_timestamp_from_value(value), replicas_ref);