summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2017-10-25 14:31:43 +0000
committerGeir Storli <geirst@oath.com>2017-10-25 14:31:43 +0000
commit7a9147a435476c1e985f120eb8c10a155f3d7b4b (patch)
tree9994a810c7048a7b18f265839ffcc99400969542 /searchlib
parentd5ff1d39ec4e1aeff417fb20d9b997390b91887b (diff)
Avoid race conditions by taking updateLock when iterating file chunks.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/docstore/logdatastore.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
index 4e3178fcdb1..1850db7b02b 100644
--- a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
+++ b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp
@@ -356,6 +356,7 @@ double
LogDataStore::getMaxBucketSpread() const
{
double maxSpread(1.0);
+ LockGuard guard(_updateLock);
for (const FileChunk::UP & fc : _fileChunks) {
if (fc) {
if (_bucketizer && fc->frozen()) {
@@ -1000,6 +1001,7 @@ LogDataStore::computeNumberOfSignificantBucketIdBits(const IBucketizer & bucketi
void
LogDataStore::verify(bool reportOnly) const
{
+ LockGuard guard(_updateLock);
for (const FileChunk::UP & fc : _fileChunks) {
if (fc) {
fc->verify(reportOnly);
@@ -1107,6 +1109,7 @@ double
LogDataStore::getVisitCost() const
{
uint32_t totalChunks = 0;
+ LockGuard guard(_updateLock);
for (auto &fc : _fileChunks) {
totalChunks += fc->getNumChunks();
}