From 799ea7206b3af987e5aae7d47f86643edbbb014d Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Wed, 25 Sep 2013 10:39:12 +0100 Subject: [PATCH] client: Fix handling display->reader_count if poll fails In wl_display_dispatch_queue, if poll fails then it would previously return immediately and leak a reference in display->reader_count. Then if the application ignores the error and tries to read again it will block forever. This can happen for example if the poll fails with EINTR which the application might consider to be a recoverable error. This patch makes it cancel the read so the reader_count will be decremented when poll fails. --- src/wayland-client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wayland-client.c b/src/wayland-client.c index d0434597..e92317a7 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -1210,8 +1210,10 @@ wl_display_dispatch_queue(struct wl_display *display, pfd[0].fd = display->fd; pfd[0].events = POLLIN; - if (poll(pfd, 1, -1) == -1) + if (poll(pfd, 1, -1) == -1) { + wl_display_cancel_read(display); return -1; + } pthread_mutex_lock(&display->mutex);