aboutsummaryrefslogtreecommitdiff
path: root/layers/object_tracker.cpp
diff options
context:
space:
mode:
authorMike Schuchardt <mikes@lunarg.com>2016-12-13 14:04:57 -0700
committerMike Schuchardt <mikes@lunarg.com>2016-12-14 13:01:42 -0700
commit323dcacf7158263913452888ebf6d1b8232d854a (patch)
treec1ad479d212cd867d87f0f65b0e3e365094ec30e /layers/object_tracker.cpp
parent1bfb96da6a558e63ada9a1ab0ca614674f172bd9 (diff)
downloadusermoji-323dcacf7158263913452888ebf6d1b8232d854a.tar.xz
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
Diffstat (limited to 'layers/object_tracker.cpp')
-rw-r--r--layers/object_tracker.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp
index 0f2a2d63..fc68e129 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 <typename T1, typename T2>