From 30b804e0bc7ca2609e91be6f9640f6edcf892334 Mon Sep 17 00:00:00 2001 From: vlj Date: Sun, 11 Sep 2016 23:36:58 +0200 Subject: [PATCH] d3d12: Fix a potential race condition. --- rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp b/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp index 38de09d3c6..681fbf769b 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12MemoryHelpers.cpp @@ -23,6 +23,8 @@ void data_cache::protect_data(u64 key, u32 start, size_t size) bool data_cache::invalidate_address(u32 addr) { + // In case 2 threads write to texture memory + std::lock_guard lock(m_mut); bool handled = false; auto It = m_protected_ranges.begin(), E = m_protected_ranges.end(); for (; It != E;) @@ -33,7 +35,6 @@ bool data_cache::invalidate_address(u32 addr) u32 protectedRangeStart = std::get<1>(protectedTexture), protectedRangeSize = std::get<2>(protectedTexture); if (addr >= protectedRangeStart && addr <= protectedRangeSize + protectedRangeStart) { - std::lock_guard lock(m_mut); u64 texadrr = std::get<0>(protectedTexture); m_address_to_data[texadrr].first.m_is_dirty = true;