summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-04-23 15:33:49 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-04-23 15:38:52 +0300
commit4d01b54408be00f7a41608b07a949d5555e26994 (patch)
treecd7218ca5ad9cf96f13a0bc38d799cf8ac987191
parente32dd7b816195936708f90773ac2d0f91a3467ca (diff)
downloadqtlocation-mapboxgl-4d01b54408be00f7a41608b07a949d5555e26994.tar.gz
Add Scheduler::makeWeakPtr
-rw-r--r--include/mbgl/actor/scheduler.hpp4
-rw-r--r--include/mbgl/util/run_loop.hpp3
-rw-r--r--platform/default/mbgl/util/default_thread_pool.hpp2
-rw-r--r--test/actor/actor.test.cpp3
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 {