Using recursive mutex

This commit is contained in:
Nekotekina 2014-07-10 00:02:21 +04:00
parent 123c4ba1a8
commit bb0695e76c

View file

@ -30,7 +30,7 @@ class MemoryBase
void* m_base_addr; void* m_base_addr;
std::vector<MemoryBlock*> MemoryBlocks; std::vector<MemoryBlock*> MemoryBlocks;
u32 m_pages[0x100000000 / 4096]; // information about every page u32 m_pages[0x100000000 / 4096]; // information about every page
std::mutex m_mutex; std::recursive_mutex m_mutex;
public: public:
MemoryBlock* UserMemory; MemoryBlock* UserMemory;
@ -78,7 +78,7 @@ public:
void RegisterPages(u64 addr, u32 size) void RegisterPages(u64 addr, u32 size)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
//LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size);
for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) for (u32 i = addr / 4096; i < (addr + size) / 4096; i++)
@ -94,7 +94,7 @@ public:
void UnregisterPages(u64 addr, u32 size) void UnregisterPages(u64 addr, u32 size)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
//LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size);
for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) for (u32 i = addr / 4096; i < (addr + size) / 4096; i++)
@ -164,7 +164,7 @@ public:
void InitRawSPU(MemoryBlock* raw_spu, const u32 num) void InitRawSPU(MemoryBlock* raw_spu, const u32 num)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
MemoryBlocks.push_back(raw_spu); MemoryBlocks.push_back(raw_spu);
if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = raw_spu; if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = raw_spu;
@ -172,7 +172,7 @@ public:
void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) void CloseRawSPU(MemoryBlock* raw_spu, const u32 num)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
for (int i = 0; i < MemoryBlocks.size(); ++i) for (int i = 0; i < MemoryBlocks.size(); ++i)
{ {
@ -187,6 +187,8 @@ public:
void Init(MemoryType type) void Init(MemoryType type)
{ {
std::lock_guard<std::recursive_mutex> lock(m_mutex);
if(m_inited) return; if(m_inited) return;
m_inited = true; m_inited = true;
@ -269,6 +271,8 @@ public:
void Close() void Close()
{ {
std::lock_guard<std::recursive_mutex> lock(m_mutex);
if(!m_inited) return; if(!m_inited) return;
m_inited = false; m_inited = false;
@ -443,7 +447,7 @@ public:
bool Map(const u64 dst_addr, const u64 src_addr, const u32 size) bool Map(const u64 dst_addr, const u64 src_addr, const u32 size)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
if(IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr)) if(IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr))
{ {
@ -457,7 +461,7 @@ public:
bool Unmap(const u64 addr) bool Unmap(const u64 addr)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::recursive_mutex> lock(m_mutex);
bool result = false; bool result = false;
for(uint i=0; i<MemoryBlocks.size(); ++i) for(uint i=0; i<MemoryBlocks.size(); ++i)