From 3ccd199708e5fd8c0d3cd4d266f88cbad3c1fa3d Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 10 Aug 2023 15:36:33 +0200 Subject: [PATCH] tu/kgsl: Fix memory leak of tmp allocations during submissions cc: mesa-stable Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_knl_kgsl.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_knl_kgsl.cc b/src/freedreno/vulkan/tu_knl_kgsl.cc index ed0cbff44cd..0f033d9b290 100644 --- a/src/freedreno/vulkan/tu_knl_kgsl.cc +++ b/src/freedreno/vulkan/tu_knl_kgsl.cc @@ -1120,8 +1120,7 @@ kgsl_queue_submit(struct tu_queue *queue, struct vk_queue_submit *vk_submit) if (ret) { result = vk_device_set_lost(&queue->device->vk, "submit failed: %s\n", strerror(errno)); - pthread_mutex_unlock(&queue->device->submit_mutex); - return result; + goto fail_submit; } p_atomic_set(&queue->fence, req.timestamp); @@ -1140,6 +1139,21 @@ kgsl_queue_submit(struct tu_queue *queue, struct vk_queue_submit *vk_submit) pthread_mutex_unlock(&queue->device->submit_mutex); pthread_cond_broadcast(&queue->device->timeline_cond); + if (cmd_buffers != (struct tu_cmd_buffer **) vk_submit->command_buffers) + vk_free(&queue->device->vk.alloc, cmd_buffers); + + vk_free(&queue->device->vk.alloc, cmds); + + return VK_SUCCESS; + +fail_submit: + pthread_mutex_unlock(&queue->device->submit_mutex); + + if (cmd_buffers != (struct tu_cmd_buffer **) vk_submit->command_buffers) + vk_free(&queue->device->vk.alloc, cmd_buffers); + + vk_free(&queue->device->vk.alloc, cmds); + return result; }