summaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/attribute/reference_mappings.h
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/attribute/reference_mappings.h')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/reference_mappings.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h
index b42d0b04b82..e6bcceeef18 100644
--- a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h
+++ b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h
@@ -39,7 +39,7 @@ class ReferenceMappings
ReverseMapping _reverseMapping;
// vector containing target lid given source lid
vespalib::RcuVectorBase<AtomicTargetLid> _targetLids;
- const uint32_t &_committedDocIdLimit;
+ const std::atomic<uint32_t>& _committedDocIdLimit;
void syncForwardMapping(const Reference &entry);
void syncReverseMappingIndices(const Reference &entry);
@@ -49,7 +49,7 @@ public:
// Class used to map from target lid to source lids
using ReverseMappingRefs = vespalib::ConstArrayRef<AtomicEntryRef>;
- ReferenceMappings(GenerationHolder &genHolder, const uint32_t &committedDocIdLimit);
+ ReferenceMappings(GenerationHolder &genHolder, const std::atomic<uint32_t>& committedDocIdLimit);
~ReferenceMappings();
@@ -85,12 +85,13 @@ public:
foreach_lid(uint32_t targetLid, FunctionType &&func) const;
TargetLids getTargetLids() const {
- uint32_t committedDocIdLimit = _committedDocIdLimit;
+ uint32_t committedDocIdLimit = _committedDocIdLimit.load(std::memory_order_acquire);
return TargetLids(&_targetLids.acquire_elem_ref(0), committedDocIdLimit);
}
uint32_t getTargetLid(uint32_t doc) const {
// Check limit to avoid reading memory beyond end of valid mapping array
- return doc < _committedDocIdLimit ? _targetLids.acquire_elem_ref(doc).load_acquire() : 0u;
+ uint32_t committed_doc_id_limit = _committedDocIdLimit.load(std::memory_order_acquire);
+ return doc < committed_doc_id_limit ? _targetLids.acquire_elem_ref(doc).load_acquire() : 0u;
}
ReverseMappingRefs getReverseMappingRefs() const {
uint32_t targetLidLimit = _targetLidLimit.load(std::memory_order_acquire);