From ef01857a1c892362222a0127d29b9662ee439d37 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Fri, 20 Nov 2015 14:33:48 -0700 Subject: layers: Fix thread-safety issues found in rendersystemtests MemTracker and DrawState needed some mutex protection. --- layers/mem_tracker.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'layers/mem_tracker.cpp') diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 2a98e8f9..3caa6b8d 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -1850,11 +1850,13 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( VkResult result = my_data->device_dispatch_table->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer); loader_platform_thread_lock_mutex(&globalLock); - if (VK_SUCCESS == result) { for (uint32_t i = 0; i < pCreateInfo->bufferCount; i++) { add_cmd_buf_info(my_data, pCreateInfo->commandPool, pCommandBuffer[i]); + if (VK_SUCCESS == result) { + for (uint32_t i = 0; i < pCreateInfo->bufferCount; i++) { + add_cmd_buf_info(my_data, pCreateInfo->commandPool, pCommandBuffer[i]); } } - printCBList(my_data, device); loader_platform_thread_unlock_mutex(&globalLock); + printCBList(my_data, device); return result; } @@ -1922,6 +1924,7 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( my_data->device_dispatch_table->DestroyCommandPool(device, commandPool, pAllocator); } + loader_platform_thread_lock_mutex(&globalLock); auto item = my_data->commandPoolMap[commandPool].pCommandBuffers.begin(); // Remove command buffers from command buffer map while (item != my_data->commandPoolMap[commandPool].pCommandBuffers.end()) { @@ -1929,6 +1932,7 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( delete_cmd_buf_info(my_data, commandPool, *del_item); } my_data->commandPoolMap.erase(commandPool); + loader_platform_thread_unlock_mutex(&globalLock); } VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( @@ -1952,8 +1956,10 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( MEMTRACK_RESET_CB_WHILE_IN_FLIGHT, "MEM", "Resetting CB %p before it has completed. You must check CB " "flag before calling vkResetCommandBuffer().", (*it)); } else { + loader_platform_thread_lock_mutex(&globalLock); // Clear memory references at this point. skipCall |= clear_cmd_buf_and_mem_references(my_data, (*it)); + loader_platform_thread_unlock_mutex(&globalLock); } } -- cgit v1.2.3