summaryrefslogtreecommitdiff
path: root/include/mbgl/util/thread.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/thread.hpp')
-rw-r--r--include/mbgl/util/thread.hpp23
1 files changed, 8 insertions, 15 deletions
diff --git a/include/mbgl/util/thread.hpp b/include/mbgl/util/thread.hpp
index b5f79aa28d..0cd12f6e95 100644
--- a/include/mbgl/util/thread.hpp
+++ b/include/mbgl/util/thread.hpp
@@ -19,11 +19,6 @@
namespace mbgl {
namespace util {
-class NoopScheduler : public Scheduler {
-public:
- void schedule(std::weak_ptr<Mailbox>) override {}
-};
-
// Manages a thread with `Object`.
// Upon creation of this object, it launches a thread and creates an object of type `Object`
@@ -49,14 +44,13 @@ public:
std::unique_ptr<std::promise<void>> running_ = std::make_unique<std::promise<void>>();
running = running_->get_future();
- // Pre-create a mailbox for this actor, using a NoopScheduler that
- // leaves the mailbox's queue unconsumed.
- // Once the RunLoop on the target thread has been created, we'll replace
- // the NoopScheduler with the RunLoop. Meanwhile, this allows us to
- // immediately provide ActorRef using this mailbox, with any messages
- // sent to them being queued in the holding mailbox until the thread is
- // up and running.
- std::shared_ptr<Mailbox> mailbox_ = std::make_shared<Mailbox>(noopScheduler);
+ // Pre-create a "holding" mailbox for this actor, whose messages are
+ // guaranteed not to be consumed until we explicitly call start(), which
+ // we'll do on the target thread, once its RunLoop and Object instance
+ // are ready.
+ // Meanwhile, this allows us to immediately provide ActorRef using this
+ // mailbox to queue any messages that come in before the thread is ready.
+ std::shared_ptr<Mailbox> mailbox_ = std::make_shared<Mailbox>();
mailbox = mailbox_;
auto tuple = std::make_tuple(std::forward<Args>(args)...);
@@ -81,7 +75,7 @@ public:
// Replace the NoopScheduler on the mailbox with the RunLoop to
// begin actually processing messages.
- actor->mailbox->setScheduler(this);
+ actor->mailbox->start(this);
runningPromise->set_value();
@@ -178,7 +172,6 @@ private:
return new (&actorStorage) Actor<Object>(std::move(sharedMailbox), std::move(std::get<I>(std::forward<ArgsTuple>(args)))...);
}
- NoopScheduler noopScheduler;
std::weak_ptr<Mailbox> mailbox;
std::aligned_storage<sizeof(Actor<Object>)> actorStorage;