[PATCH v2] client: Fix handling display->reader_count if poll fails
Kristian Høgsberg
hoegsberg at gmail.com
Wed Sep 25 10:12:23 PDT 2013
On Wed, Sep 25, 2013 at 10:39:12AM +0100, Neil Roberts wrote:
> 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.
> ---
>
> Ok, here is a second version of the patch which calls
> wl_display_cancel_read as you suggested. Thanks for the review.
Thanks for the reminder, we need that in the release.
Kristian
> 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 cad587d..a20a71e 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) {
> + wl_display_cancel_read(display);
> return -1;
> + }
>
> pthread_mutex_lock(&display->mutex);
>
> --
> 1.8.3.1
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list