From 6cb927d638991caf5ea4dd0b01c453cee291d24a Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 3 Mar 2023 15:26:47 +0000 Subject: [PATCH] Fix race removing forced reference on buffer delete --- renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index d48b866ac..f0046ecd2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -193,7 +193,6 @@ void WrappedVulkan::vkDestroyFramebuffer(VkDevice device, VkFramebuffer obj, if(obj == VK_NULL_HANDLE) return; VkFramebuffer unwrappedObj = Unwrap(obj); - m_ForcedReferences.removeOne(GetRecord(obj)); if(IsReplayMode(m_State)) { const VulkanCreationInfo::Framebuffer &rpinfo = m_CreationInfo.m_Framebuffer[GetResID(obj)]; @@ -216,7 +215,6 @@ void WrappedVulkan::vkDestroyRenderPass(VkDevice device, VkRenderPass obj, if(obj == VK_NULL_HANDLE) return; VkRenderPass unwrappedObj = Unwrap(obj); - m_ForcedReferences.removeOne(GetRecord(obj)); if(IsReplayMode(m_State)) { const VulkanCreationInfo::RenderPass &rpinfo = m_CreationInfo.m_RenderPass[GetResID(obj)]; @@ -263,7 +261,10 @@ void WrappedVulkan::vkDestroyBuffer(VkDevice device, VkBuffer buffer, GetResourceManager()->PreFreeMemory(record->resInfo->dedicatedMemory); } - m_ForcedReferences.removeOne(GetRecord(buffer)); + { + SCOPED_LOCK(m_ForcedReferencesLock); + m_ForcedReferences.removeOne(GetRecord(buffer)); + } if(IsReplayMode(m_State)) m_CreationInfo.erase(GetResID(buffer));