From 2eb0203bf43e635b756bbf1322c53b8d299d4b37 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 13 Nov 2015 14:00:13 -0800 Subject: [PATCH] [core] Cancelled flag needs to be atomic; it is read from multiple threads --- src/mbgl/util/run_loop.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mbgl/util/run_loop.hpp b/src/mbgl/util/run_loop.hpp index 5bf3551e5..6113ac221 100644 --- a/src/mbgl/util/run_loop.hpp +++ b/src/mbgl/util/run_loop.hpp @@ -10,6 +10,7 @@ #include #include #include +#include namespace mbgl { namespace util { @@ -45,7 +46,7 @@ public: template std::unique_ptr invokeCancellable(Fn&& fn, Args&&... args) { - auto flag = std::make_shared(); + auto flag = std::make_shared>(); *flag = false; auto tuple = std::make_tuple(std::move(args)...); @@ -64,7 +65,7 @@ public: template std::unique_ptr invokeWithCallback(Fn&& fn, Cb&& callback, Args&&... args) { - auto flag = std::make_shared(); + auto flag = std::make_shared>(); *flag = false; // Create a lambda L1 that invokes another lambda L2 on the current RunLoop R, that calls @@ -100,7 +101,7 @@ private: template class Invoker : public WorkTask { public: - Invoker(F&& f, P&& p, std::shared_ptr canceled_ = nullptr) + Invoker(F&& f, P&& p, std::shared_ptr> canceled_ = nullptr) : canceled(canceled_), func(std::move(f)), params(std::move(p)) { @@ -134,7 +135,7 @@ private: } std::recursive_mutex mutex; - std::shared_ptr canceled; + std::shared_ptr> canceled; F func; P params;