summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2019-01-15 09:48:44 +0100
committerGitHub <noreply@github.com>2019-01-15 09:48:44 +0100
commit959655d2bd9f743b34c6e5caac21e44de48187e3 (patch)
tree4aba819ffb380484fedf12770fb5b7e8bddc5a04 /config
parent86b4be8b2439880c7e40c157896e1b42caac4b86 (diff)
parent7d1dda33a7b4e1e1727947c0104ed86036a5bef4 (diff)
Merge pull request #8109 from vespa-engine/vekterli/fix-tsan-detected-data-races
Fix some ThreadSanitizer reported data races
Diffstat (limited to 'config')
-rw-r--r--config/src/vespa/config/subscription/configsubscriptionset.cpp4
-rw-r--r--config/src/vespa/config/subscription/configsubscriptionset.h4
2 files changed, 5 insertions, 3 deletions
diff --git a/config/src/vespa/config/subscription/configsubscriptionset.cpp b/config/src/vespa/config/subscription/configsubscriptionset.cpp
index f120272edcf..9b3ef32a128 100644
--- a/config/src/vespa/config/subscription/configsubscriptionset.cpp
+++ b/config/src/vespa/config/subscription/configsubscriptionset.cpp
@@ -42,7 +42,7 @@ ConfigSubscriptionSet::acquireSnapshot(uint64_t timeoutInMillis, bool ignoreChan
bool inSync = false;
LOG(debug, "Going into nextConfig loop, time left is %d", timeLeft);
- while ((_state != CLOSED) && (timeLeft >= 0) && !inSync) {
+ while (!isClosed() && (timeLeft >= 0) && !inSync) {
size_t numChanged = 0;
size_t numGenerationChanged = 0;
bool generationsInSync = true;
@@ -117,7 +117,7 @@ ConfigSubscriptionSet::close()
bool
ConfigSubscriptionSet::isClosed() const
{
- return (_state == CLOSED);
+ return (_state.load(std::memory_order_relaxed) == CLOSED);
}
ConfigSubscription::SP
diff --git a/config/src/vespa/config/subscription/configsubscriptionset.h b/config/src/vespa/config/subscription/configsubscriptionset.h
index cebd3007b19..ce1f45b0eb8 100644
--- a/config/src/vespa/config/subscription/configsubscriptionset.h
+++ b/config/src/vespa/config/subscription/configsubscriptionset.h
@@ -9,6 +9,8 @@
#include "configsubscription.h"
#include "configprovider.h"
+#include <atomic>
+
namespace config {
/**
@@ -60,7 +62,7 @@ private:
int64_t _currentGeneration; // Holds the current config generation.
SubscriptionList _subscriptionList; // List of current subscriptions.
- SubscriberState _state; // Current state of this subscriber.
+ std::atomic<SubscriberState> _state; // Current state of this subscriber.
};
} // namespace config