diff options
-rw-r--r-- | AFBClient.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/AFBClient.cpp b/AFBClient.cpp index 3a8549d..26efab6 100644 --- a/AFBClient.cpp +++ b/AFBClient.cpp @@ -7,6 +7,7 @@ #include <cstdlib> #include <cstring> +#include <atomic> #include <mutex> #include <unistd.h> @@ -110,7 +111,8 @@ int api_call(struct sd_event *loop, struct afb_wsj1 *wsj1, const char *verb, // Alternatively we could setup a local struct and use it as // closure, but I think it is cleaner this way. int call_rc = 0; - bool returned = false; + std::atomic<bool> returned; + returned.store(false, std::memory_order_relaxed); std::function<void(bool, json_object *)> wrappedOnReply = [&returned, &call_rc, &onReply](bool ok, json_object *j) { TRACEN(wrappedOnReply); @@ -121,7 +123,7 @@ int api_call(struct sd_event *loop, struct afb_wsj1 *wsj1, const char *verb, TRACEN(onReply); onReply(ok, j); } - returned = true; + returned.store(true, std::memory_order_release); }; // make the actual call, use wrappedOnReply as closure @@ -147,7 +149,7 @@ int api_call(struct sd_event *loop, struct afb_wsj1 *wsj1, const char *verb, // We need to dispatch until "returned" got set, this is necessary // if events get triggered by the call (and would be dispatched before // the actual call-reply). - while (!returned) { + while (!returned.load(std::memory_order_consume)) { dispatch_internal(loop); } |