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 just makes it decrement the reader count 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 48f06c7..576a773 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -1224,8 +1224,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) { + display->reader_count--; return -1; + } pthread_mutex_lock(&display->mutex); -- 1.8.3.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel