diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2015-11-20 14:33:48 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2015-11-20 14:36:05 -0700 |
| commit | ef01857a1c892362222a0127d29b9662ee439d37 (patch) | |
| tree | 25352b453b26576a5a78f4f01d6d4a59fc2335b5 /layers/mem_tracker.cpp | |
| parent | fc466cbc7f992935a3ec7c7d63c0b359c48b9183 (diff) | |
| download | usermoji-ef01857a1c892362222a0127d29b9662ee439d37.tar.xz | |
layers: Fix thread-safety issues found in rendersystemtests
MemTracker and DrawState needed some mutex protection.
Diffstat (limited to 'layers/mem_tracker.cpp')
| -rw-r--r-- | layers/mem_tracker.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
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); } } |
