From 3486cdc771319cd174cad4548562793172465f92 Mon Sep 17 00:00:00 2001 From: Jean-François Marquis Date: Wed, 15 Nov 2017 17:48:48 -0500 Subject: layers: Add some missings locks of global_lock Add locks of global_lock in BindBufferMemory, BindImageMemory and GetImageSubresourceLayout to have safe access to imageMap and bufferMap. --- layers/core_validation.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 6f1ffeee..4ebbc780 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -3828,7 +3828,11 @@ static void PostCallRecordBindBufferMemory(layer_data *dev_data, VkBuffer buffer VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - auto buffer_state = GetBufferState(dev_data, buffer); + BUFFER_STATE *buffer_state; + { + unique_lock_t lock(global_lock); + buffer_state = GetBufferState(dev_data, buffer); + } bool skip = PreCallValidateBindBufferMemory(dev_data, buffer, buffer_state, mem, memoryOffset); if (!skip) { result = dev_data->dispatch_table.BindBufferMemory(device, buffer, mem, memoryOffset); @@ -6503,9 +6507,11 @@ VKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImag VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, VkSubresourceLayout *pLayout) { layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + unique_lock_t lock(global_lock); bool skip = PreCallValidateGetImageSubresourceLayout(device_data, image, pSubresource); if (!skip) { + lock.unlock(); device_data->dispatch_table.GetImageSubresourceLayout(device, image, pSubresource, pLayout); } } @@ -8969,7 +8975,11 @@ static void PostCallRecordBindImageMemory(layer_data *dev_data, VkImage image, I VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - auto image_state = GetImageState(dev_data, image); + IMAGE_STATE *image_state; + { + unique_lock_t lock(global_lock); + image_state = GetImageState(dev_data, image); + } bool skip = PreCallValidateBindImageMemory(dev_data, image, image_state, mem, memoryOffset); if (!skip) { result = dev_data->dispatch_table.BindImageMemory(device, image, mem, memoryOffset); @@ -11079,7 +11089,7 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice p } VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, const VkDebugMarkerObjectNameInfoEXT *pNameInfo) { - std::unique_lock lock(global_lock); + unique_lock_t lock(global_lock); layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); if (pNameInfo->pObjectName) { device_data->report_data->debugObjectNameMap->insert( -- cgit v1.2.3