[PATCH v3] client: check for error in wl_display_read_events
Marek Chalupa
mchqwerty at gmail.com
Fri Aug 22 05:28:59 PDT 2014
This prevents from blocking shown in one display test. Also, it
makes sense to not proceed further in the code of the function
when an error ocurred.
v2. set errno
put note about the errno into wl_display_prepare_read doc
check for error with mutex locked
v3.
set errno to display->last_error
check for the error only in wl_display_read_events. It's sufficient
as prevention for the hanging and programmer doesn't need to
check if wl_display_prepare_read (that was previously covered by
this patch too) returned an error or the queue just was not empty.
Without the check, it could result in indefinite looping.
Thanks to Pekka Paalanen <pekka.paalanen at collabora.co.uk> for
constant reviewing and discussing this patch.
Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>
---
src/wayland-client.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/wayland-client.c b/src/wayland-client.c
index 0f3f3d9..9159ee0 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -1200,6 +1200,13 @@ wl_display_read_events(struct wl_display *display)
pthread_mutex_lock(&display->mutex);
+ if (display->last_error) {
+ pthread_mutex_unlock(&display->mutex);
+
+ errno = display->last_error;
+ return -1;
+ }
+
ret = read_events(display);
pthread_mutex_unlock(&display->mutex);
--
2.0.4
More information about the wayland-devel
mailing list