From 18c3b296a6c39d91cdc4e41e14696b6a386f5dbe Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Tue, 18 Feb 2025 17:52:48 +0100 Subject: [PATCH] vulkan: don't leak debug utils label name Label names are duplicated, so free them before resetting or deleting the cmdbuffer/queue. Fixes leaks when testing dEQP-VK.api.debug_utils.long_labels. Reviewed-by: Faith Ekstrand Reviewed-by: Samuel Pitoiset Signed-off-by: Juan A. Suarez Romero Part-of: --- src/vulkan/runtime/vk_command_buffer.c | 5 +++++ src/vulkan/runtime/vk_queue.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/vulkan/runtime/vk_command_buffer.c b/src/vulkan/runtime/vk_command_buffer.c index f678d9bc0a1..12735e20dd3 100644 --- a/src/vulkan/runtime/vk_command_buffer.c +++ b/src/vulkan/runtime/vk_command_buffer.c @@ -23,6 +23,7 @@ #include "vk_command_buffer.h" +#include "vk_alloc.h" #include "vk_command_pool.h" #include "vk_common_entrypoints.h" #include "vk_device.h" @@ -63,6 +64,8 @@ vk_command_buffer_reset(struct vk_command_buffer *command_buffer) vk_cmd_queue_reset(&command_buffer->cmd_queue); vk_meta_object_list_reset(command_buffer->base.device, &command_buffer->meta_objects); + util_dynarray_foreach (&command_buffer->labels, VkDebugUtilsLabelEXT, label) + vk_free(&command_buffer->base.device->alloc, (void *)label->pLabelName); util_dynarray_clear(&command_buffer->labels); command_buffer->region_begin = true; } @@ -97,6 +100,8 @@ vk_command_buffer_finish(struct vk_command_buffer *command_buffer) list_del(&command_buffer->pool_link); vk_command_buffer_reset_render_pass(command_buffer); vk_cmd_queue_finish(&command_buffer->cmd_queue); + util_dynarray_foreach (&command_buffer->labels, VkDebugUtilsLabelEXT, label) + vk_free(&command_buffer->base.device->alloc, (void *)label->pLabelName); util_dynarray_fini(&command_buffer->labels); vk_meta_object_list_finish(command_buffer->base.device, &command_buffer->meta_objects); diff --git a/src/vulkan/runtime/vk_queue.c b/src/vulkan/runtime/vk_queue.c index 5e03564adb2..4ee79964853 100644 --- a/src/vulkan/runtime/vk_queue.c +++ b/src/vulkan/runtime/vk_queue.c @@ -1371,6 +1371,8 @@ vk_queue_finish(struct vk_queue *queue) cnd_destroy(&queue->submit.push); mtx_destroy(&queue->submit.mutex); + util_dynarray_foreach (&queue->labels, VkDebugUtilsLabelEXT, label) + vk_free(&queue->base.device->alloc, (void *)label->pLabelName); util_dynarray_fini(&queue->labels); list_del(&queue->link); vk_object_base_finish(&queue->base);