diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 089c628678..54a225649b 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1134,7 +1134,7 @@ namespace rsx { // Get timestamp, and convert it from microseconds to nanoseconds return get_system_time() * 1000; - } + } gsl::span thread::get_raw_index_array(const std::vector >& draw_indexed_clause) const { @@ -1280,11 +1280,13 @@ namespace rsx { if (!in_begin_end) { + reader_lock lock(m_mtx_task); for (const auto& range : m_invalidated_memory_ranges) { on_invalidate_memory_range(range.first, range.second); } + lock.upgrade(); m_invalidated_memory_ranges.clear(); } } @@ -2325,9 +2327,10 @@ namespace rsx check_zcull_status(false); } - void thread::on_notify_memory_unmapped(u32 base_address, u32 size) - { - m_invalidated_memory_ranges.push_back({ base_address, size }); + void thread::on_notify_memory_unmapped(u32 base_address, u32 size) + { + writer_lock lock(m_mtx_task); + m_invalidated_memory_ranges.push_back({ base_address, size }); } //Pause/cont wrappers for FIFO ctrl. Never call this from rsx thread itself!