diff --git a/renderdoc/driver/vulkan/vk_memory.cpp b/renderdoc/driver/vulkan/vk_memory.cpp index f6c3753fb..67d568e2e 100644 --- a/renderdoc/driver/vulkan/vk_memory.cpp +++ b/renderdoc/driver/vulkan/vk_memory.cpp @@ -558,12 +558,19 @@ void WrappedVulkan::FreeAllMemory(MemoryScope scope) rdcarray allocs; allocs.swap(allocList); - m_MemoryFreeThread = Threading::CreateThread([this, d, allocs]() { - for(const MemoryAllocation &alloc : allocs) - { - ObjDisp(d)->FreeMemory(Unwrap(d), Unwrap(alloc.mem), NULL); - GetResourceManager()->ReleaseWrappedResource(alloc.mem); - } + rdcarray mems; + mems.reserve(allocs.size()); + + // clean up resource manager book-keeping as this is not thread safe and is fast anyway + for(const MemoryAllocation &alloc : allocs) + { + mems.push_back(Unwrap(alloc.mem)); + GetResourceManager()->ReleaseWrappedResource(alloc.mem); + } + + m_MemoryFreeThread = Threading::CreateThread([this, d, mems]() { + for(VkDeviceMemory mem : mems) + ObjDisp(d)->FreeMemory(Unwrap(d), mem, NULL); }); }