[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