summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com>2022-04-27 16:02:49 +0200
committerGitHub <noreply@github.com>2022-04-27 16:02:49 +0200
commit08479187853177039fc629ad5690daad6312e6d3 (patch)
tree37341665621fbd1717a7dabf33f8cd7b10df90ce /vespalib
parent9451d1799aa088a3c96b7e3e8184656132a0cac7 (diff)
parent1950bed653a7e162809cfafee67bf4100c2e64a9 (diff)
Merge pull request #22312 from vespa-engine/toregge/use-atomic-first-used-generation-in-generation-handler
Use atomic _firstUsedGeneration member variable in vespalib::GenerationHandler.
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/util/generationhandler.cpp4
-rw-r--r--vespalib/src/vespa/vespalib/util/generationhandler.h4
2 files changed, 4 insertions, 4 deletions
diff --git a/vespalib/src/vespa/vespalib/util/generationhandler.cpp b/vespalib/src/vespa/vespalib/util/generationhandler.cpp
index a4b3dd6f5e6..7797978d187 100644
--- a/vespalib/src/vespa/vespalib/util/generationhandler.cpp
+++ b/vespalib/src/vespa/vespalib/util/generationhandler.cpp
@@ -125,7 +125,7 @@ GenerationHandler::updateFirstUsedGeneration()
toFree->_next = _free;
_free = toFree;
}
- _firstUsedGeneration = _first->_generation;
+ _firstUsedGeneration.store(_first->_generation, std::memory_order_relaxed);
}
GenerationHandler::GenerationHandler()
@@ -215,7 +215,7 @@ GenerationHandler::getGenerationRefCount(generation_t gen) const
{
if (static_cast<sgeneration_t>(gen - _generation) > 0)
return 0u;
- if (static_cast<sgeneration_t>(_firstUsedGeneration - gen) > 0)
+ if (static_cast<sgeneration_t>(getFirstUsedGeneration() - gen) > 0)
return 0u;
for (GenerationHold *hold = _first; hold != nullptr; hold = hold->_next) {
if (hold->_generation.load(std::memory_order_relaxed) == gen)
diff --git a/vespalib/src/vespa/vespalib/util/generationhandler.h b/vespalib/src/vespa/vespalib/util/generationhandler.h
index 0c4b49a2d5b..2aeb4c2f886 100644
--- a/vespalib/src/vespa/vespalib/util/generationhandler.h
+++ b/vespalib/src/vespa/vespalib/util/generationhandler.h
@@ -73,7 +73,7 @@ public:
private:
generation_t _generation;
- generation_t _firstUsedGeneration;
+ std::atomic<generation_t> _firstUsedGeneration;
std::atomic<GenerationHold *> _last; // Points to "current generation" entry
GenerationHold *_first; // Points to "firstUsedGeneration" entry
GenerationHold *_free; // List of free entries
@@ -109,7 +109,7 @@ public:
* if writer hasn't updated first used generation after last reader left.
*/
generation_t getFirstUsedGeneration() const {
- return _firstUsedGeneration;
+ return _firstUsedGeneration.load(std::memory_order_relaxed);
}
/**