diff --git a/Source/Core/Common/WorkQueueThread.h b/Source/Core/Common/WorkQueueThread.h index 426d8b493d..e5dfac8b49 100644 --- a/Source/Core/Common/WorkQueueThread.h +++ b/Source/Core/Common/WorkQueueThread.h @@ -27,14 +27,14 @@ public: Shutdown(); m_shutdown.Clear(); m_function = std::move(function); - m_thread = std::thread([this] { ThreadLoop(); }); + m_thread = std::thread(&WorkQueueThread::ThreadLoop, this); } template void EmplaceItem(Args&&... args) { { - std::unique_lock lg(m_lock); + std::lock_guard lg(m_lock); m_items.emplace(std::forward(args)...); } m_wakeup.Set(); @@ -59,14 +59,13 @@ private: while (true) { - T item; - { - std::unique_lock lg(m_lock); - if (m_items.empty()) - break; - item = m_items.front(); - m_items.pop(); - } + std::unique_lock lg(m_lock); + if (m_items.empty()) + break; + T item{std::move(m_items.front())}; + m_items.pop(); + lg.unlock(); + m_function(std::move(item)); }