diff --git a/.pick_status.json b/.pick_status.json index 911c8187a60..60db9ff410f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -434,7 +434,7 @@ "description": "venus: fix missing renderer destructions", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "25b8f4f7143f2e022df245ba2e1a2ab3ed4a2f90", "notes": null diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 0a8a29984bf..a843b463e84 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -181,7 +181,7 @@ vn_instance_init_renderer(struct vn_instance *instance) vn_log(instance, "wire format version %d != %d", renderer_info->wire_format_version, version); } - return VK_ERROR_INITIALIZATION_FAILED; + goto out_renderer_destroy; } version = vn_info_vk_xml_version(); @@ -197,7 +197,7 @@ vn_instance_init_renderer(struct vn_instance *instance) VK_VERSION_MINOR(VN_MIN_RENDERER_VERSION), VK_VERSION_PATCH(VN_MIN_RENDERER_VERSION)); } - return VK_ERROR_INITIALIZATION_FAILED; + goto out_renderer_destroy; } uint32_t spec_version = @@ -226,6 +226,12 @@ vn_instance_init_renderer(struct vn_instance *instance) } return VK_SUCCESS; + +out_renderer_destroy: + vn_renderer_destroy(instance->renderer, alloc); + /* needed by stub instance creation */ + instance->renderer = NULL; + return VK_ERROR_INITIALIZATION_FAILED; } /* instance commands */ @@ -309,6 +315,7 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, result = vn_instance_init_renderer(instance); if (result == VK_ERROR_INITIALIZATION_FAILED) { + assert(!instance->renderer); *pInstance = instance_handle; return VK_SUCCESS; }