1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-20 19:54:19 +01:00

[dxvk] Fixed lockup issue in thread destructors

This commit is contained in:
Philip Rebohle 2017-12-25 16:05:11 +01:00
parent 24bceb86c2
commit 89138e5b40
2 changed files with 12 additions and 4 deletions

View File

@ -33,14 +33,17 @@ namespace dxvk {
DxvkCsThread::~DxvkCsThread() {
m_stopped.store(true);
{ std::unique_lock<std::mutex> lock(m_mutex);
m_stopped.store(true);
}
m_condOnAdd.notify_one();
m_thread.join();
}
void DxvkCsThread::dispatchChunk(Rc<DxvkCsChunk>&& chunk) {
{ std::lock_guard<std::mutex> lock(m_mutex);
{ std::unique_lock<std::mutex> lock(m_mutex);
m_chunks.push(std::move(m_curChunk));
}

View File

@ -1,17 +1,22 @@
#include "dxvk_device.h"
#include "dxvk_queue.h"
using namespace std::chrono_literals;
namespace dxvk {
DxvkSubmissionQueue::DxvkSubmissionQueue(DxvkDevice* device)
: m_device(device),
m_thread([this] () { this->threadFunc(); }) {
m_thread([this] () { threadFunc(); }) {
}
DxvkSubmissionQueue::~DxvkSubmissionQueue() {
m_stopped.store(true);
{ std::unique_lock<std::mutex> lock(m_mutex);
m_stopped.store(true);
}
m_condOnAdd.notify_one();
m_thread.join();
}