From cb03803253b026d5f4c1e0fef431a12df461e6d8 Mon Sep 17 00:00:00 2001 From: Cameron Kumar Date: Fri, 1 Jun 2018 12:16:19 +0100 Subject: [PATCH] vulkan/wsi: Destroy swapchain images after terminating FIFO queues The queue_manager thread can access the images from x11_present_to_x11, hence this reorder prevents dereferencing of dangling pointers. Cc: "18.1" Fixes: e73d136a023080 ("vulkan/wsi/x11: Implement FIFO mode.") Reviewed-by: Lionel Landwerlin --- src/vulkan/wsi/wsi_common_x11.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 1bfbc7c3001..20d7cf5a2c8 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -1235,9 +1235,6 @@ x11_swapchain_destroy(struct wsi_swapchain *anv_chain, struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain; xcb_void_cookie_t cookie; - for (uint32_t i = 0; i < chain->base.image_count; i++) - x11_image_finish(chain, pAllocator, &chain->images[i]); - if (chain->threaded) { chain->status = VK_ERROR_OUT_OF_DATE_KHR; /* Push a UINT32_MAX to wake up the manager */ @@ -1247,6 +1244,9 @@ x11_swapchain_destroy(struct wsi_swapchain *anv_chain, wsi_queue_destroy(&chain->present_queue); } + for (uint32_t i = 0; i < chain->base.image_count; i++) + x11_image_finish(chain, pAllocator, &chain->images[i]); + xcb_unregister_for_special_event(chain->conn, chain->special_event); cookie = xcb_present_select_input_checked(chain->conn, chain->event_id, chain->window, -- 2.30.2