anv: fix memory leak on device destroy

v2: handle vma destruction if vkCreateDevice fails (Jordan)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Gitlab: https://gitlab.freedesktop.org/mesa/mesa/issues/1959
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Lionel Landwerlin 2019-10-18 15:28:30 +03:00
parent f834656a41
commit b30e01aef5

View file

@ -2515,7 +2515,7 @@ VkResult anv_CreateDevice(
vk_priority_to_gen(priority)); vk_priority_to_gen(priority));
if (err != 0 && priority > VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) { if (err != 0 && priority > VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) {
result = vk_error(VK_ERROR_NOT_PERMITTED_EXT); result = vk_error(VK_ERROR_NOT_PERMITTED_EXT);
goto fail_fd; goto fail_vmas;
} }
} }
@ -2684,6 +2684,11 @@ VkResult anv_CreateDevice(
pthread_mutex_destroy(&device->mutex); pthread_mutex_destroy(&device->mutex);
fail_context_id: fail_context_id:
anv_gem_destroy_context(device, device->context_id); anv_gem_destroy_context(device, device->context_id);
fail_vmas:
if (physical_device->use_softpin) {
util_vma_heap_finish(&device->vma_hi);
util_vma_heap_finish(&device->vma_lo);
}
fail_fd: fail_fd:
close(device->fd); close(device->fd);
fail_device: fail_device:
@ -2739,6 +2744,11 @@ void anv_DestroyDevice(
anv_bo_pool_finish(&device->batch_bo_pool); anv_bo_pool_finish(&device->batch_bo_pool);
if (physical_device->use_softpin) {
util_vma_heap_finish(&device->vma_hi);
util_vma_heap_finish(&device->vma_lo);
}
pthread_cond_destroy(&device->queue_submit); pthread_cond_destroy(&device->queue_submit);
pthread_mutex_destroy(&device->mutex); pthread_mutex_destroy(&device->mutex);