aboutsummaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahooinc.com>2022-11-30 14:07:03 +0000
committerTor Brede Vekterli <vekterli@yahooinc.com>2022-11-30 14:07:03 +0000
commit2ae5668f0abd88b076d3a256bb3d1d7bde3f56a8 (patch)
tree44514608b7b9f38d739c68e59a4223e5b5e297b9 /documentapi
parentf611155a289870ad02b79e0cb9068a9fa1d55f67 (diff)
Move synchronous policy init inside lock
Avoids a race when multiple threads try to synchronously initialize a MessageBus policy. This resolves a TSan warning.
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp
index ea3889bfd5e..01a300badab 100644
--- a/documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp
@@ -71,13 +71,13 @@ currentPolicyInitError(vespalib::stringref error) {
void
AsyncInitializationPolicy::select(mbus::RoutingContext& context)
{
- if (_syncInit && _state != State::DONE) {
- initSynchronous();
- }
-
{
std::lock_guard lock(_lock);
+ if (_syncInit && _state != State::DONE) {
+ initSynchronous();
+ }
+
if (_state == State::NOT_STARTED || _state == State::FAILED) {
// Only 1 task may be queued to the executor at any point in time.
// This is maintained by only scheduling a task when either no task