From: Marcus Fritzsch Date: Mon, 4 Sep 2017 11:41:35 +0000 (+0200) Subject: Impl: made 'returned' boolean atomic X-Git-Tag: 4.99.1~43 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=staging%2Fwindowmanager.git;a=commitdiff_plain;h=808d675237bdc2750f63a21869264ddb7319a57f Impl: made 'returned' boolean atomic Signed-off-by: Marcus Fritzsch --- 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); }