layers: Fix memleak in unique object's debug functions
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index 51bf57c..6b6c061 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -465,9 +465,8 @@
}
VkResult result = my_map_data->dispatch_table.CreateSwapchainKHR(device, local_pCreateInfo->ptr(), pAllocator, pSwapchain);
- if (local_pCreateInfo) {
- delete local_pCreateInfo;
- }
+ delete local_pCreateInfo;
+
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
*pSwapchain = WrapNew(*pSwapchain);
@@ -498,7 +497,7 @@
}
VkResult result = dev_data->dispatch_table.CreateSharedSwapchainsKHR(device, swapchainCount, local_pCreateInfos->ptr(),
pAllocator, pSwapchains);
- if (local_pCreateInfos) delete[] local_pCreateInfos;
+ delete[] local_pCreateInfos;
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
for (uint32_t i = 0; i < swapchainCount; i++) {
@@ -579,7 +578,7 @@
}
}
- if (local_pPresentInfo) delete local_pPresentInfo;
+ delete local_pPresentInfo;
return result;
}
@@ -873,62 +872,62 @@
VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, const VkDebugMarkerObjectTagInfoEXT *pTagInfo) {
layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- auto local_tag_info = new safe_VkDebugMarkerObjectTagInfoEXT(pTagInfo);
+ safe_VkDebugMarkerObjectTagInfoEXT local_tag_info(pTagInfo);
{
std::lock_guard<std::mutex> lock(global_lock);
- auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info->object));
+ auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info.object));
if (it != unique_id_mapping.end()) {
- local_tag_info->object = it->second;
+ local_tag_info.object = it->second;
}
}
VkResult result = device_data->dispatch_table.DebugMarkerSetObjectTagEXT(
- device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT *>(local_tag_info));
+ device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT *>(&local_tag_info));
return result;
}
VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, const VkDebugMarkerObjectNameInfoEXT *pNameInfo) {
layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- auto local_name_info = new safe_VkDebugMarkerObjectNameInfoEXT(pNameInfo);
+ safe_VkDebugMarkerObjectNameInfoEXT local_name_info(pNameInfo);
{
std::lock_guard<std::mutex> lock(global_lock);
- auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info->object));
+ auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info.object));
if (it != unique_id_mapping.end()) {
- local_name_info->object = it->second;
+ local_name_info.object = it->second;
}
}
VkResult result = device_data->dispatch_table.DebugMarkerSetObjectNameEXT(
- device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT *>(local_name_info));
+ device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT *>(&local_name_info));
return result;
}
// VK_EXT_debug_utils
VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT *pTagInfo) {
layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- auto local_tag_info = new safe_VkDebugUtilsObjectTagInfoEXT(pTagInfo);
+ safe_VkDebugUtilsObjectTagInfoEXT local_tag_info(pTagInfo);
{
std::lock_guard<std::mutex> lock(global_lock);
- auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info->objectHandle));
+ auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info.objectHandle));
if (it != unique_id_mapping.end()) {
- local_tag_info->objectHandle = it->second;
+ local_tag_info.objectHandle = it->second;
}
}
VkResult result = device_data->dispatch_table.SetDebugUtilsObjectTagEXT(
- device, reinterpret_cast<const VkDebugUtilsObjectTagInfoEXT *>(local_tag_info));
+ device, reinterpret_cast<const VkDebugUtilsObjectTagInfoEXT *>(&local_tag_info));
return result;
}
VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT *pNameInfo) {
layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- auto local_name_info = new safe_VkDebugUtilsObjectNameInfoEXT(pNameInfo);
+ safe_VkDebugUtilsObjectNameInfoEXT local_name_info(pNameInfo);
{
std::lock_guard<std::mutex> lock(global_lock);
- auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info->objectHandle));
+ auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info.objectHandle));
if (it != unique_id_mapping.end()) {
- local_name_info->objectHandle = it->second;
+ local_name_info.objectHandle = it->second;
}
}
VkResult result = device_data->dispatch_table.SetDebugUtilsObjectNameEXT(
- device, reinterpret_cast<const VkDebugUtilsObjectNameInfoEXT *>(local_name_info));
+ device, reinterpret_cast<const VkDebugUtilsObjectNameInfoEXT *>(&local_name_info));
return result;
}