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 <faith.ekstrand@collabora.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33611>
This commit is contained in:
Juan A. Suarez Romero
2025-02-18 17:52:48 +01:00
committed by Marge Bot
parent 7c4a919f19
commit 18c3b296a6
2 changed files with 7 additions and 0 deletions
+5
View File
@@ -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);
+2
View File
@@ -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);