From dcb17243f8b7c07e95e6e1df56aeaf85b6a76ec8 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 2 Jul 2022 21:17:51 +1000 Subject: [PATCH] ThreadedFileReader: Fix a low-chance race when closing file --- pcsx2/CDVD/ThreadedFileReader.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pcsx2/CDVD/ThreadedFileReader.cpp b/pcsx2/CDVD/ThreadedFileReader.cpp index ccc43999a7..fc11748ec0 100644 --- a/pcsx2/CDVD/ThreadedFileReader.cpp +++ b/pcsx2/CDVD/ThreadedFileReader.cpp @@ -193,6 +193,9 @@ bool ThreadedFileReader::Decompress(void* target, u64 begin, u32 size) u64 off = begin; while (remaining) { + if (m_requestCancelled.load(std::memory_order_relaxed)) + return false; + Chunk chunk = ChunkForOffset(off); if (m_internalBlockSize || chunk.offset != off || chunk.length > remaining) { @@ -304,6 +307,11 @@ void ThreadedFileReader::CancelAndWaitUntilStopped(void) { m_requestCancelled.store(true, std::memory_order_relaxed); std::unique_lock lock(m_mtx); + + // Prevent the last request being picked up, if there was one. + // m_requestCancelled just stops the current decompress. + m_requestSize = 0; + while (m_running) m_condition.wait(lock); }