From f35132b44bd7e3aca6b36d31aa1b09c579ac5a5a Mon Sep 17 00:00:00 2001 From: Gabríel Arthúr Pétursson Date: Sat, 3 Jun 2017 23:49:33 +0000 Subject: layers: Fix leak of descriptor pool states --- layers/core_validation.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 3a0a893d..801b36c5 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -3020,15 +3020,15 @@ static void freeDescriptorSet(layer_data *dev_data, cvdescriptorset::DescriptorS // Free all DS Pools including their Sets & related sub-structs // NOTE : Calls to this function should be wrapped in mutex static void deletePools(layer_data *dev_data) { - if (dev_data->descriptorPoolMap.size() <= 0) return; - for (auto ii = dev_data->descriptorPoolMap.begin(); ii != dev_data->descriptorPoolMap.end(); ++ii) { + for (auto ii = dev_data->descriptorPoolMap.begin(); ii != dev_data->descriptorPoolMap.end();) { // Remove this pools' sets from setMap and delete them - for (auto ds : (*ii).second->sets) { + for (auto ds : ii->second->sets) { freeDescriptorSet(dev_data, ds); } - (*ii).second->sets.clear(); + ii->second->sets.clear(); + delete ii->second; + ii = dev_data->descriptorPoolMap.erase(ii); } - dev_data->descriptorPoolMap.clear(); } static void clearDescriptorPool(layer_data *dev_data, const VkDevice device, const VkDescriptorPool pool, @@ -5396,6 +5396,7 @@ static void PostCallRecordDestroyDescriptorPool(layer_data *dev_data, VkDescript freeDescriptorSet(dev_data, ds); } dev_data->descriptorPoolMap.erase(descriptorPool); + delete desc_pool_state; } VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, -- cgit v1.2.3