From 0282c36a1b82c0d006c8566e021cf50b7544e94b Mon Sep 17 00:00:00 2001 From: Leon Henrik Plickat Date: Tue, 21 Dec 2021 20:35:00 +0100 Subject: Fix Wayland event flushing Before this patch, the flush loop could get stuck --- src/wlclock.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/wlclock.c b/src/wlclock.c index bc88ca4..670f9f5 100644 --- a/src/wlclock.c +++ b/src/wlclock.c @@ -592,18 +592,21 @@ static void clock_run () while (context.loop) { - /* Flush Wayland events. */ - errno = 0; - do { - if ( wl_display_flush(context.display) == 1 && errno != EAGAIN ) - { - clocklog(0, "ERROR: wl_display_flush: %s\n", - strerror(errno)); - break; - } - } while ( errno == EAGAIN ); + /* Flush pending Wayland events/requests. */ + int ret = 1; + while ( ret > 0 ) + { + ret = wl_display_dispatch_pending(context.display); + wl_display_flush(context.display); + } + if ( ret < 0 ) + { + clocklog(0, "ERROR: wl_display_dispatch_pending: %s\n", strerror(errno)); + context.ret = EXIT_FAILURE; + goto exit; + } - int ret = poll(fds, 1, get_timeout()); + ret = poll(fds, 1, get_timeout()); if ( ret == 0 ) /* Timeout -> update clock hands. */ { -- cgit v1.2.3