diff options
author | Neil Roberts <neil@linux.intel.com> | 2013-09-25 10:39:12 +0100 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-09-25 10:11:20 -0700 |
commit | 799ea7206b3af987e5aae7d47f86643edbbb014d (patch) | |
tree | 5fd6143de821e083613e5682793d152693f4ada0 | |
parent | 4125367f20d70cdf3c14f1bcafbf46e1c6e20835 (diff) |
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.
-rw-r--r-- | src/wayland-client.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/wayland-client.c b/src/wayland-client.c index d043459..e92317a 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); |