From 2d3e7b6e9a74d0a1a0ffe5733c5cea31baa59f41 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 27 Feb 2024 18:55:19 +0100 Subject: [PATCH] wsi/wl: Fix deadlock in dispatch_queue_timeout. Signed-off-by: Hans-Kristian Arntzen Fixes: a00f9c401b ("loader/wayland: Add fallback wl_display_dispatch_queue_timeout") Part-of: --- src/loader/loader_wayland_helper.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/loader/loader_wayland_helper.c b/src/loader/loader_wayland_helper.c index 4cb2da7d156..c25d787b68b 100644 --- a/src/loader/loader_wayland_helper.c +++ b/src/loader/loader_wayland_helper.c @@ -122,6 +122,12 @@ wl_display_dispatch_queue_timeout(struct wl_display *display, ret = wl_display_dispatch_queue_pending(display, queue); if (ret != 0) break; + + /* wl_display_dispatch_queue_pending can return 0 if we ended up reading + * from WL fd, but there was no complete event to dispatch yet. + * Try reading again. */ + if (wl_display_prepare_read_queue(display, queue) == -1) + return wl_display_dispatch_queue_pending(display, queue); } return ret;