From d33e2ad166133f42342bdf8ccb52a1e0662917cb Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Thu, 20 Oct 2016 14:42:57 -0600 Subject: layers:Early exit in object_tracker FreeMemory If memory object is invalid, object_tracker should not call down the chain. Also, update validation test to expect that object_tracker will flag the invalid handle instead of core_validation. --- layers/object_tracker.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'layers/object_tracker.cpp') diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index a7c95093..ec1bcae9 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -3282,15 +3282,17 @@ VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyI } VKAPI_ATTR void VKAPI_CALL FreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator) { + bool skip = false; std::unique_lock lock(global_lock); - ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00621); - ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, true, VALIDATION_ERROR_00622); + skip |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00621); + skip |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, true, VALIDATION_ERROR_00622); lock.unlock(); + if (!skip) { + get_dispatch_table(ot_device_table_map, device)->FreeMemory(device, memory, pAllocator); - get_dispatch_table(ot_device_table_map, device)->FreeMemory(device, memory, pAllocator); - - lock.lock(); - DestroyObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); + lock.lock(); + DestroyObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); + } } VKAPI_ATTR VkResult VKAPI_CALL MapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, -- cgit v1.2.3