summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@yahooinc.com>2022-05-19 12:36:15 +0000
committerHåvard Pettersen <havardpe@yahooinc.com>2022-05-19 12:36:15 +0000
commitc38cd24962e883a2a44593d1a0eb5d51d5885192 (patch)
treebabea6062a3e6cc017ac3d4af5575e701b0c7e95 /slobrok
parentf17c4fe7de4c55f5c4ee61897eab8c2f588d8405 (diff)
make _reqDone atomic
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/sbmirror.cpp8
-rw-r--r--slobrok/src/vespa/slobrok/sbmirror.h3
-rw-r--r--slobrok/src/vespa/slobrok/sbregister.cpp8
-rw-r--r--slobrok/src/vespa/slobrok/sbregister.h2
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;