The FIFO thread signals shutdown by pushing UINT32_MAX into the acquire
queue, and shutdown is signaled to it by pushing UINT32_MAX into the
present queue.

Explicitly catch a push of UINT32_MAX in either direction and treat this
as error.

Signed-off-by: Daniel Stone <dani...@collabora.com>
---
 src/vulkan/wsi/wsi_common_x11.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index e84572810d3..dadada82ef1 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -832,7 +832,7 @@ x11_acquire_next_image_from_queue(struct x11_swapchain 
*chain,
    VkResult result = wsi_queue_pull(&chain->acquire_queue,
                                     &image_index, timeout);
    /* On error, the thread has shut down, so safe to update chain->status */
-   if (result < 0)
+   if (result < 0 || image_index == UINT32_MAX)
       return x11_swapchain_result(chain, result);
 
    assert(image_index < chain->base.image_count);
@@ -938,7 +938,7 @@ x11_manage_fifo_queues(void *state)
       result = wsi_queue_pull(&chain->present_queue, &image_index, INT64_MAX);
       if (result < 0) {
          goto fail;
-      } else if (chain->status < 0) {
+      } else if (chain->status < 0 || image_index == UINT32_MAX) {
          /* The status can change underneath us if the swapchain is destroyed
           * from another thread.
           */
-- 
2.14.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to