From 034c7b52de8ed76834538f17ff4ab1153955f74b Mon Sep 17 00:00:00 2001 From: Mike Schuchardt Date: Tue, 13 Dec 2016 14:04:57 -0700 Subject: [PATCH] layers: Fix object tracker memory leak Upon repeated calls, GetDisplayPlaneSupportedDisplaysKHR will call CreateObject multiple times with the same VkDisplayKHR handle. Add a check in CreateObject for an existing tracking object before allocating a new one. Change-Id: I50f634fbe8b7e69edbfeb4e6f0c050b7fccaa6e4 --- layers/object_tracker.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index 0f2a2d6..fc68e12 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -263,17 +263,20 @@ static void CreateObject(T1 dispatchable_object, T2 object, VkDebugReportObjectT auto object_handle = handle_value(object); bool custom_allocator = pAllocator != nullptr; - log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, object_handle, - __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, - object_name[object_type], object_handle); + if (!instance_data->object_map[object_type].count(object_handle)) { + log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, object_handle, __LINE__, + OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, + object_name[object_type], object_handle); - OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; - pNewObjNode->object_type = object_type; - pNewObjNode->status = custom_allocator ? OBJSTATUS_CUSTOM_ALLOCATOR : OBJSTATUS_NONE; - pNewObjNode->handle = object_handle; - instance_data->object_map[object_type][object_handle] = pNewObjNode; - instance_data->num_objects[object_type]++; - instance_data->num_total_objects++; + OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; + pNewObjNode->object_type = object_type; + pNewObjNode->status = custom_allocator ? OBJSTATUS_CUSTOM_ALLOCATOR : OBJSTATUS_NONE; + pNewObjNode->handle = object_handle; + + instance_data->object_map[object_type][object_handle] = pNewObjNode; + instance_data->num_objects[object_type]++; + instance_data->num_total_objects++; + } } template -- 2.7.4