diff --git a/src/base/thread_pool.cc b/src/base/thread_pool.cc index f25ebde..db7de58 100644 --- a/src/base/thread_pool.cc +++ b/src/base/thread_pool.cc @@ -56,6 +56,10 @@ void ThreadPool::PostTaskAndReply(const Location& from, semaphore_.release(); } +void ThreadPool::CancelTasks() { + task_runner_.CancelTasks(); +} + void ThreadPool::WorkerMain() { for (;;) { semaphore_.acquire(); diff --git a/src/base/thread_pool.h b/src/base/thread_pool.h index 57da75f..d747dd4 100644 --- a/src/base/thread_pool.h +++ b/src/base/thread_pool.h @@ -39,6 +39,8 @@ class ThreadPool { semaphore_.release(); } + void CancelTasks(); + private: std::vector threads_; diff --git a/src/engine/engine.cc b/src/engine/engine.cc index 421daae..9dffd41 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -50,6 +50,9 @@ Engine::Engine(Platform* platform) Engine::~Engine() { LOG << "Shutting down engine."; + thread_pool_.CancelTasks(); + thread_pool_.Shutdown(); + game_.reset(); stats_.reset(); textures_.clear(); diff --git a/src/engine/renderer/vulkan/renderer_vulkan.cc b/src/engine/renderer/vulkan/renderer_vulkan.cc index cb8541b..a31c0c7 100644 --- a/src/engine/renderer/vulkan/renderer_vulkan.cc +++ b/src/engine/renderer/vulkan/renderer_vulkan.cc @@ -987,6 +987,7 @@ void RendererVulkan::Shutdown() { return; LOG << "Shutting down renderer."; + task_runner_.CancelTasks(); quit_.store(true, std::memory_order_relaxed); semaphore_.release(); setup_thread_.join();