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; }