summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-04-27 14:47:47 +0200
committerTor Egge <Tor.Egge@online.no>2022-04-27 14:47:47 +0200
commit04b3a33ba6d9abb7ff7225f940fbe00b8a78a781 (patch)
tree427091c79613fa689b4571a1b280866855764dfa /searchlib
parentecec4e1caa9ef5565cbd625c0d2fa4238c541481 (diff)
Use atomic _numDocs counter in search::memoryindex::MemoryIndex.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/memory_index.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/memoryindex/memory_index.h b/searchlib/src/vespa/searchlib/memoryindex/memory_index.h
index dc1b5d8060d..4296ba5bd1a 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/memory_index.h
+++ b/searchlib/src/vespa/searchlib/memoryindex/memory_index.h
@@ -8,6 +8,7 @@
#include <vespa/searchlib/queryeval/searchable.h>
#include <vespa/vespalib/stllike/hash_set.h>
#include <vespa/vespalib/util/memoryusage.h>
+#include <atomic>
namespace search::index {
class IFieldLengthInspector;
@@ -52,7 +53,7 @@ private:
std::unique_ptr<DocumentInverterCollection> _inverters;
bool _frozen;
uint32_t _maxDocId;
- uint32_t _numDocs;
+ std::atomic<uint32_t> _numDocs;
mutable std::mutex _lock;
std::vector<bool> _hiddenFields;
index::Schema::SP _prunedSchema;
@@ -70,11 +71,13 @@ private:
}
}
void incNumDocs() {
- ++_numDocs;
+ auto num_docs = _numDocs.load(std::memory_order_relaxed);
+ _numDocs.store(num_docs + 1, std::memory_order_relaxed);
}
void decNumDocs() {
- if (_numDocs > 0) {
- --_numDocs;
+ auto num_docs = _numDocs.load(std::memory_order_relaxed);
+ if (num_docs > 0) {
+ _numDocs.store(num_docs - 1, std::memory_order_relaxed);
}
}
@@ -154,7 +157,7 @@ public:
}
virtual uint32_t getNumDocs() const {
- return _numDocs;
+ return _numDocs.load(std::memory_order_relaxed);
}
virtual uint64_t getNumWords() const;