From 808d675237bdc2750f63a21869264ddb7319a57f Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Mon, 4 Sep 2017 13:41:35 +0200 Subject: [PATCH] Impl: made 'returned' boolean atomic Signed-off-by: Marcus Fritzsch --- AFBClient.cpp | 8 +++++--- 1 file 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 #include +#include #include #include @@ -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 returned; + returned.store(false, std::memory_order_relaxed); std::function 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); } -- 2.16.6