From 7807598690a8bc0736aeaf9d65abd5fa6f18fa12 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 20 Dec 2015 09:35:50 -0800 Subject: [PATCH] Mutex around PBP file access. There's some thread safety issue in there, this makes it so we can read thumbnails without crashing sometimes - fixes #7330. --- Core/FileSystems/BlockDevices.cpp | 5 +++++ Core/FileSystems/BlockDevices.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/Core/FileSystems/BlockDevices.cpp b/Core/FileSystems/BlockDevices.cpp index 5796c12247..2f0a290d72 100644 --- a/Core/FileSystems/BlockDevices.cpp +++ b/Core/FileSystems/BlockDevices.cpp @@ -344,9 +344,12 @@ bool CISOFileBlockDevice::ReadBlocks(u32 minBlock, int count, u8 *outPtr) { } +recursive_mutex NPDRMDemoBlockDevice::mutex_; + NPDRMDemoBlockDevice::NPDRMDemoBlockDevice(FileLoader *fileLoader) : fileLoader_(fileLoader) { + lock_guard guard(mutex_); MAC_KEY mkey; CIPHER_KEY ckey; u8 np_header[256]; @@ -412,6 +415,7 @@ NPDRMDemoBlockDevice::NPDRMDemoBlockDevice(FileLoader *fileLoader) NPDRMDemoBlockDevice::~NPDRMDemoBlockDevice() { + lock_guard guard(mutex_); delete [] table; delete [] tempBuf; delete [] blockBuf; @@ -421,6 +425,7 @@ int lzrc_decompress(void *out, int out_len, void *in, int in_len); bool NPDRMDemoBlockDevice::ReadBlock(int blockNumber, u8 *outPtr) { + lock_guard guard(mutex_); CIPHER_KEY ckey; int block, lba, lzsize; size_t readSize; diff --git a/Core/FileSystems/BlockDevices.h b/Core/FileSystems/BlockDevices.h index 84c508836e..c11d15b24e 100644 --- a/Core/FileSystems/BlockDevices.h +++ b/Core/FileSystems/BlockDevices.h @@ -25,6 +25,7 @@ #include "Common/CommonTypes.h" #include "Core/ELF/PBPReader.h" +#include "base/mutex.h" class FileLoader; @@ -106,6 +107,7 @@ public: private: FileLoader *fileLoader_; + static recursive_mutex mutex_; u32 lbaSize; u32 psarOffset;