diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-04-23 15:33:49 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-04-23 15:38:52 +0300 |
commit | 4d01b54408be00f7a41608b07a949d5555e26994 (patch) | |
tree | cd7218ca5ad9cf96f13a0bc38d799cf8ac987191 | |
parent | e32dd7b816195936708f90773ac2d0f91a3467ca (diff) | |
download | qtlocation-mapboxgl-4d01b54408be00f7a41608b07a949d5555e26994.tar.gz |
Add Scheduler::makeWeakPtr
-rw-r--r-- | include/mbgl/actor/scheduler.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/util/run_loop.hpp | 3 | ||||
-rw-r--r-- | platform/default/mbgl/util/default_thread_pool.hpp | 2 | ||||
-rw-r--r-- | test/actor/actor.test.cpp | 3 |
4 files changed, 12 insertions, 0 deletions
diff --git a/include/mbgl/actor/scheduler.hpp b/include/mbgl/actor/scheduler.hpp index 75ead29f0a..7753eb5c37 100644 --- a/include/mbgl/actor/scheduler.hpp +++ b/include/mbgl/actor/scheduler.hpp @@ -1,5 +1,7 @@ #pragma once +#include <mapbox/std/weak.hpp> + #include <memory> namespace mbgl { @@ -41,6 +43,8 @@ public: // Set/Get the current Scheduler for this thread static Scheduler* GetCurrent(); static void SetCurrent(Scheduler*); + + virtual mapbox::base::WeakPtr<Scheduler> makeWeakPtr() = 0; }; } // namespace mbgl diff --git a/include/mbgl/util/run_loop.hpp b/include/mbgl/util/run_loop.hpp index 381e3ae213..d527827e6d 100644 --- a/include/mbgl/util/run_loop.hpp +++ b/include/mbgl/util/run_loop.hpp @@ -79,6 +79,8 @@ public: }); } + ::mapbox::base::WeakPtr<Scheduler> makeWeakPtr() override { return weakFactory.makeWeakPtr(); } + class Impl; private: @@ -125,6 +127,7 @@ private: std::mutex mutex; std::unique_ptr<Impl> impl; + ::mapbox::base::WeakPtrFactory<Scheduler> weakFactory{this}; }; } // namespace util diff --git a/platform/default/mbgl/util/default_thread_pool.hpp b/platform/default/mbgl/util/default_thread_pool.hpp index a14d16d771..5b994a190c 100644 --- a/platform/default/mbgl/util/default_thread_pool.hpp +++ b/platform/default/mbgl/util/default_thread_pool.hpp @@ -15,6 +15,7 @@ public: ~ThreadPool() override; void schedule(std::weak_ptr<Mailbox>) override; + mapbox::base::WeakPtr<Scheduler> makeWeakPtr() override { return weakFactory.makeWeakPtr(); } private: std::vector<std::thread> threads; @@ -22,6 +23,7 @@ private: std::mutex mutex; std::condition_variable cv; bool terminate { false }; + mapbox::base::WeakPtrFactory<Scheduler> weakFactory{this}; }; } // namespace mbgl diff --git a/test/actor/actor.test.cpp b/test/actor/actor.test.cpp index 7493abe263..47f3082402 100644 --- a/test/actor/actor.test.cpp +++ b/test/actor/actor.test.cpp @@ -94,6 +94,7 @@ TEST(Actor, DestructionBlocksOnSend) { std::promise<void> promise; std::future<void> future; std::atomic<bool> waited; + mapbox::base::WeakPtrFactory<Scheduler> weakFactory{this}; TestScheduler(std::promise<void> promise_, std::future<void> future_) : promise(std::move(promise_)), @@ -111,6 +112,8 @@ TEST(Actor, DestructionBlocksOnSend) { std::this_thread::sleep_for(1ms); waited = true; } + + mapbox::base::WeakPtr<Scheduler> makeWeakPtr() override { return weakFactory.makeWeakPtr(); } }; struct Test { |