summaryrefslogtreecommitdiff
path: root/src/mbgl/actor/thread_pool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/actor/thread_pool.cpp')
-rw-r--r--src/mbgl/actor/thread_pool.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/mbgl/actor/thread_pool.cpp b/src/mbgl/actor/thread_pool.cpp
index 89ca1b72f0..2995ed26ad 100644
--- a/src/mbgl/actor/thread_pool.cpp
+++ b/src/mbgl/actor/thread_pool.cpp
@@ -11,10 +11,10 @@ ThreadPool::ThreadPool(std::size_t count) {
std::unique_lock<std::mutex> lock(mutex);
cv.wait(lock, [this] {
- return !queue.empty() || terminate.load();
+ return !queue.empty() || terminate;
});
- if (terminate.load()) {
+ if (terminate) {
return;
}
@@ -31,7 +31,11 @@ ThreadPool::ThreadPool(std::size_t count) {
}
ThreadPool::~ThreadPool() {
- terminate.store(true);
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ terminate = true;
+ }
+
cv.notify_all();
for (auto& thread : threads) {
@@ -40,8 +44,11 @@ ThreadPool::~ThreadPool() {
}
void ThreadPool::schedule(std::weak_ptr<Mailbox> mailbox) {
- std::lock_guard<std::mutex> lock(mutex);
- queue.push(mailbox);
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ queue.push(mailbox);
+ }
+
cv.notify_one();
}