summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2021-12-21 20:35:00 +0100
committerLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2021-12-21 20:35:00 +0100
commit0282c36a1b82c0d006c8566e021cf50b7544e94b (patch)
tree56aa91bb7f6015107024cc00fdd1065757cbcc88
parent82a85116611092adf5c5f1f1f2ce6a02174fa6d3 (diff)
downloadwlclock-0282c36a1b82c0d006c8566e021cf50b7544e94b.tar.gz
wlclock-0282c36a1b82c0d006c8566e021cf50b7544e94b.tar.bz2
Fix Wayland event flushing
Before this patch, the flush loop could get stuck
-rw-r--r--src/wlclock.c25
1 files 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. */
{