diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 7cd8df5c2b..2dae537d84 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -675,10 +675,8 @@ namespace vm return 0; } - u32 block_t::used() + u32 block_t::imp_used(const vm::writer_lock&) { - reader_lock lock; - u32 result = 0; for (auto& entry : m_map) @@ -689,6 +687,13 @@ namespace vm return result; } + u32 block_t::used() + { + writer_lock lock(0); + + return imp_used(lock); + } + std::shared_ptr map(u32 addr, u32 size, u64 flags) { writer_lock lock(0); @@ -734,7 +739,7 @@ namespace vm { if (*it && (*it)->addr == addr) { - if (must_be_empty && (!it->unique() || (*it)->used())) + if (must_be_empty && (!it->unique() || (*it)->imp_used(lock))) { return *it; } diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h index b0bd873d18..eadfcc2bcd 100644 --- a/rpcs3/Emu/Memory/vm.h +++ b/rpcs3/Emu/Memory/vm.h @@ -156,6 +156,9 @@ namespace vm // Unmap memory at specified location previously returned by alloc(), return size u32 dealloc(u32 addr, u32* sup_out = nullptr); + // Internal + u32 imp_used(const vm::writer_lock&); + // Get allocated memory count u32 used(); };