summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-04-28 14:24:09 +0200
committerTor Egge <Tor.Egge@online.no>2022-04-28 14:24:09 +0200
commit93e87328d0d4e1be55754c223f1773de43ec110c (patch)
tree94dc45c55ee6819cdbbb277802c3416eedeebc45 /vespalib
parenta2a2a0a48d11979db706a0a3a638ec77fdffe71e (diff)
Use atomic _heldBytes in vespalib::GenerationHolder
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/util/generationholder.cpp6
-rw-r--r--vespalib/src/vespa/vespalib/util/generationholder.h4
2 files changed, 5 insertions, 5 deletions
diff --git a/vespalib/src/vespa/vespalib/util/generationholder.cpp b/vespalib/src/vespa/vespalib/util/generationholder.cpp
index 122edf23da1..5bfa7d152ce 100644
--- a/vespalib/src/vespa/vespalib/util/generationholder.cpp
+++ b/vespalib/src/vespa/vespalib/util/generationholder.cpp
@@ -17,14 +17,14 @@ GenerationHolder::~GenerationHolder()
{
assert(_hold1List.empty());
assert(_hold2List.empty());
- assert(_heldBytes == 0);
+ assert(getHeldBytes() == 0);
}
void
GenerationHolder::hold(GenerationHeldBase::UP data)
{
_hold1List.push_back(GenerationHeldBase::SP(data.release()));
- _heldBytes += _hold1List.back()->getSize();
+ _heldBytes.store(getHeldBytes() + _hold1List.back()->getSize(), std::memory_order_relaxed);
}
void
@@ -50,7 +50,7 @@ GenerationHolder::trimHoldListsSlow(generation_t usedGen)
GenerationHeldBase &first = *_hold2List.front();
if (static_cast<sgeneration_t>(first._generation - usedGen) >= 0)
break;
- _heldBytes -= first.getSize();
+ _heldBytes.store(getHeldBytes() - first.getSize(), std::memory_order_relaxed);
_hold2List.erase(_hold2List.begin());
}
}
diff --git a/vespalib/src/vespa/vespalib/util/generationholder.h b/vespalib/src/vespa/vespalib/util/generationholder.h
index 1ca2e54a84d..0bc630404af 100644
--- a/vespalib/src/vespa/vespalib/util/generationholder.h
+++ b/vespalib/src/vespa/vespalib/util/generationholder.h
@@ -53,7 +53,7 @@ private:
HoldList _hold1List;
HoldList _hold2List;
- size_t _heldBytes;
+ std::atomic<size_t> _heldBytes;
/**
* Transfer holds from hold1 to hold2 lists, assigning generation.
@@ -93,7 +93,7 @@ public:
}
void clearHoldLists();
- size_t getHeldBytes() const { return _heldBytes; }
+ size_t getHeldBytes() const { return _heldBytes.load(std::memory_order_relaxed); }
};
}