diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2022-04-27 16:02:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 16:02:49 +0200 |
commit | 08479187853177039fc629ad5690daad6312e6d3 (patch) | |
tree | 37341665621fbd1717a7dabf33f8cd7b10df90ce /vespalib | |
parent | 9451d1799aa088a3c96b7e3e8184656132a0cac7 (diff) | |
parent | 1950bed653a7e162809cfafee67bf4100c2e64a9 (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.cpp | 4 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/generationhandler.h | 4 |
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); } /** |