From 59f255d66e4dad89f633deec535482faa8bd8561 Mon Sep 17 00:00:00 2001 From: Marek Chalupa Date: Mon, 27 Oct 2014 09:19:46 +0100 Subject: [PATCH] client: read_events should return -1 after an error When a thread is sleeping, waiting until another thread read from the display, it always returns 0. Even when an error occured. In documentation stands: "return 0 on success or -1 on error. In case of error errno will be set accordingly" So this is a fix for this. Along with the read_events, fix a test so that it now complies with this behaviour (and we have this tested) Signed-off-by: Marek Chalupa Reviewed-by: Pekka Paalanen --- src/wayland-client.c | 5 +++++ tests/display-test.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/wayland-client.c b/src/wayland-client.c index 01629e01..7df22d09 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -1190,6 +1190,11 @@ read_events(struct wl_display *display) while (display->read_serial == serial) pthread_cond_wait(&display->reader_cond, &display->mutex); + + if (display->last_error) { + errno = display->last_error; + return -1; + } } return 0; diff --git a/tests/display-test.c b/tests/display-test.c index aecf3411..d5f4d00c 100644 --- a/tests/display-test.c +++ b/tests/display-test.c @@ -369,9 +369,9 @@ thread_read_error(void *data) * thread should be woken up or it will block indefinitely. */ c->display_stopped = 1; - assert(wl_display_read_events(c->wl_display) == 0); + assert(wl_display_read_events(c->wl_display) == -1); - wl_display_dispatch_pending(c->wl_display); + assert(wl_display_dispatch_pending(c->wl_display) == -1); assert(wl_display_get_error(c->wl_display)); pthread_exit(NULL);