client: read_events should return -1 after an error
authorMarek Chalupa <mchqwerty@gmail.com>
Mon, 27 Oct 2014 08:19:46 +0000 (09:19 +0100)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Fri, 21 Nov 2014 11:59:42 +0000 (13:59 +0200)
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 <mchqwerty@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
src/wayland-client.c
tests/display-test.c

index 01629e0..7df22d0 100644 (file)
@@ -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;
index aecf341..d5f4d00 100644 (file)
@@ -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);