diff options
author | Håvard Pettersen <havardpe@yahooinc.com> | 2022-05-19 12:36:15 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@yahooinc.com> | 2022-05-19 12:36:15 +0000 |
commit | c38cd24962e883a2a44593d1a0eb5d51d5885192 (patch) | |
tree | babea6062a3e6cc017ac3d4af5575e701b0c7e95 /slobrok | |
parent | f17c4fe7de4c55f5c4ee61897eab8c2f588d8405 (diff) |
make _reqDone atomic
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/sbmirror.cpp | 8 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/sbmirror.h | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/sbregister.cpp | 8 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/sbregister.h | 2 |
4 files changed, 11 insertions, 10 deletions
diff --git a/slobrok/src/vespa/slobrok/sbmirror.cpp b/slobrok/src/vespa/slobrok/sbmirror.cpp index 9207eb3f56f..62d288d40dc 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.cpp +++ b/slobrok/src/vespa/slobrok/sbmirror.cpp @@ -217,8 +217,8 @@ MirrorAPI::handleReconfig() bool MirrorAPI::handleReqDone() { - if (_reqDone) { - _reqDone = false; + if (_reqDone.load(std::memory_order_relaxed)) { + _reqDone.store(false, std::memory_order_relaxed); _reqPending = false; bool reconn = _req->IsError() ? true : handleIncrementalFetch(); @@ -321,9 +321,9 @@ MirrorAPI::PerformTask() void MirrorAPI::RequestDone(FRT_RPCRequest *req) { - LOG_ASSERT(req == _req && !_reqDone); + LOG_ASSERT(req == _req && !_reqDone.load(std::memory_order_relaxed)); (void) req; - _reqDone = true; + _reqDone.store(true, std::memory_order_relaxed); ScheduleNow(); } diff --git a/slobrok/src/vespa/slobrok/sbmirror.h b/slobrok/src/vespa/slobrok/sbmirror.h index 58258ecf023..d13a52f2b49 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.h +++ b/slobrok/src/vespa/slobrok/sbmirror.h @@ -7,6 +7,7 @@ #include <vespa/vespalib/util/gencnt.h> #include <vespa/vespalib/stllike/hash_map.h> #include <vespa/fnet/frt/invoker.h> +#include <atomic> class FRT_Target; @@ -92,7 +93,7 @@ private: mutable std::mutex _lock; bool _reqPending; bool _scheduled; - bool _reqDone; + std::atomic<bool> _reqDone; bool _logOnSuccess; SpecMap _specs; vespalib::GenCnt _specsGen; diff --git a/slobrok/src/vespa/slobrok/sbregister.cpp b/slobrok/src/vespa/slobrok/sbregister.cpp index cdab4d4009d..c1948a24aa8 100644 --- a/slobrok/src/vespa/slobrok/sbregister.cpp +++ b/slobrok/src/vespa/slobrok/sbregister.cpp @@ -125,8 +125,8 @@ RegisterAPI::unregisterName(vespalib::stringref name) void RegisterAPI::handleReqDone() { - if (_reqDone) { - _reqDone = false; + if (_reqDone.load(std::memory_order_relaxed)) { + _reqDone.store(false, std::memory_order_relaxed); if (_req->IsError()) { if (_req->GetErrorCode() != FRTE_RPC_METHOD_FAILED) { LOG(debug, "register failed: %s (code %d)", @@ -270,9 +270,9 @@ RegisterAPI::PerformTask() void RegisterAPI::RequestDone(FRT_RPCRequest *req) { - LOG_ASSERT(req == _req && !_reqDone); + LOG_ASSERT(req == _req && !_reqDone.load(std::memory_order_relaxed)); (void) req; - _reqDone = true; + _reqDone.store(true, std::memory_order_relaxed); ScheduleNow(); } diff --git a/slobrok/src/vespa/slobrok/sbregister.h b/slobrok/src/vespa/slobrok/sbregister.h index 7590cbc0afa..16f14446234 100644 --- a/slobrok/src/vespa/slobrok/sbregister.h +++ b/slobrok/src/vespa/slobrok/sbregister.h @@ -86,7 +86,7 @@ private: FRT_Supervisor &_orb; RPCHooks _hooks; std::mutex _lock; - bool _reqDone; + std::atomic<bool> _reqDone; bool _logOnSuccess; std::atomic<bool> _busy; SlobrokList _slobrokSpecs; |