diff options
author | Samuel Pitoiset <[email protected]> | 2020-04-29 14:03:24 +0200 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-05-06 06:44:20 +0000 |
commit | 9c62e63aca202bef07b20441618dd360b94b2f7d (patch) | |
tree | cf99bc76eafd4fb9fae7cfa931e2d4b4c44b9347 | |
parent | b867a677e99f429d904021b37c5640d3eeaf0e8d (diff) |
radv: fix a memleak if the physical device initialization failed
The disk cache object should be freed.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4806>
-rw-r--r-- | src/amd/vulkan/radv_device.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 118f8f2b32a..638fe0325ac 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -297,7 +297,7 @@ radv_physical_device_init(struct radv_physical_device *device, if (!device->ws) { result = vk_error(instance, VK_ERROR_INCOMPATIBLE_DRIVER); - goto fail; + goto fail_fd; } if (drm_device && instance->enabled_extensions.KHR_display) { @@ -328,10 +328,9 @@ radv_physical_device_init(struct radv_physical_device *device, device->rad_info.name); if (radv_device_get_cache_uuid(device->rad_info.family, device->cache_uuid)) { - device->ws->destroy(device->ws); result = vk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED, "cannot generate UUID"); - goto fail; + goto fail_wsi; } /* These flags affect shader compilation. */ @@ -399,14 +398,17 @@ radv_physical_device_init(struct radv_physical_device *device, */ result = radv_init_wsi(device); if (result != VK_SUCCESS) { - device->ws->destroy(device->ws); vk_error(instance, result); - goto fail; + goto fail_disk_cache; } return VK_SUCCESS; -fail: +fail_disk_cache: + disk_cache_destroy(device->disk_cache); +fail_wsi: + device->ws->destroy(device->ws); +fail_fd: close(fd); if (master_fd != -1) close(master_fd); |