summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahooinc.com>2022-03-03 15:46:53 +0000
committerTor Brede Vekterli <vekterli@yahooinc.com>2022-03-03 15:47:10 +0000
commit1c4400d115874bac4e62734ae871040d1b173501 (patch)
treed44c9db1797309d324f8924f7286e45726a3e38c /config
parente91467c5c8811a0bcc1e8e781ff1d17c7f490c0e (diff)
Make ConfigRetriever closed-state polling atomic
Diffstat (limited to 'config')
-rw-r--r--config/src/vespa/config/retriever/configretriever.cpp8
-rw-r--r--config/src/vespa/config/retriever/configretriever.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/config/src/vespa/config/retriever/configretriever.cpp b/config/src/vespa/config/retriever/configretriever.cpp
index b2de6337434..6c48c62deff 100644
--- a/config/src/vespa/config/retriever/configretriever.cpp
+++ b/config/src/vespa/config/retriever/configretriever.cpp
@@ -42,7 +42,7 @@ ConfigRetriever::getBootstrapConfigs(vespalib::duration timeout)
ConfigSnapshot
ConfigRetriever::getConfigs(const ConfigKeySet & keySet, vespalib::duration timeout)
{
- if (_closed)
+ if (isClosed())
return ConfigSnapshot();
if (_bootstrapRequired) {
throw ConfigRuntimeException("Cannot change keySet until bootstrap getBootstrapConfigs() has been called");
@@ -52,7 +52,7 @@ ConfigRetriever::getConfigs(const ConfigKeySet & keySet, vespalib::duration time
_lastKeySet = keySet;
{
std::lock_guard guard(_lock);
- if (_closed)
+ if (isClosed())
return ConfigSnapshot();
_configSubscriber = std::make_unique<GenericConfigSubscriber>(_context);
}
@@ -83,7 +83,7 @@ void
ConfigRetriever::close()
{
std::lock_guard guard(_lock);
- _closed = true;
+ _closed.store(true, std::memory_order_relaxed);
_bootstrapSubscriber.close();
if (_configSubscriber)
_configSubscriber->close();
@@ -92,7 +92,7 @@ ConfigRetriever::close()
bool
ConfigRetriever::isClosed() const
{
- return (_closed);
+ return _closed.load(std::memory_order_relaxed);
}
}
diff --git a/config/src/vespa/config/retriever/configretriever.h b/config/src/vespa/config/retriever/configretriever.h
index 8fea6af0863..bf86a2e69ee 100644
--- a/config/src/vespa/config/retriever/configretriever.h
+++ b/config/src/vespa/config/retriever/configretriever.h
@@ -101,7 +101,7 @@ private:
int64_t _generation;
vespalib::duration _subscribeTimeout;
bool _bootstrapRequired;
- bool _closed;
+ std::atomic<bool> _closed;
};
} // namespace config