diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-11-30 14:07:03 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-11-30 14:07:03 +0000 |
commit | 2ae5668f0abd88b076d3a256bb3d1d7bde3f56a8 (patch) | |
tree | 44514608b7b9f38d739c68e59a4223e5b5e297b9 /documentapi/src | |
parent | f611155a289870ad02b79e0cb9068a9fa1d55f67 (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/src')
-rw-r--r-- | documentapi/src/vespa/documentapi/messagebus/policies/asyncinitializationpolicy.cpp | 8 |
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 |