#include "node_thread_pool.hpp" #include "util/async_queue.hpp" #include namespace node_mbgl { NodeThreadPool::NodeThreadPool() : queue(new util::AsyncQueue>(uv_default_loop(), [this](std::weak_ptr mailbox) { Worker* worker = new Worker(mailbox); Nan::AsyncQueueWorker(worker); })) { // Don't keep the event loop alive. queue->unref(); } NodeThreadPool::~NodeThreadPool() { queue->stop(); } void NodeThreadPool::schedule(std::weak_ptr mailbox) { queue->send(std::move(mailbox)); } NodeThreadPool::Worker::Worker(std::weak_ptr mailbox_) : AsyncWorker(nullptr), mailbox(std::move(mailbox_)) {}; void NodeThreadPool::Worker::Execute() { mbgl::Mailbox::maybeReceive(mailbox); } void NodeThreadPool::Worker::WorkComplete() { // no-op to avoid calling nullptr callback } } // namespace node_mbgl