wayland-server: Return 0 from read_events() in case of EAGAIN
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 9 Jul 2013 21:55:45 +0000 (17:55 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 9 Jul 2013 22:00:00 +0000 (18:00 -0400)
Getting no data from the socket is not an error condition.  This may
happen in case of calling prepare_read() and then read_events() with
no other pending readers and no data in the socket.  In general,
read_events() may not queue up events in the given event queue.  From
a given threads point of view it doesn't matter whether events were
read and put in a different event queue or no events were read at all.

src/wayland-client.c

index 45aa372..7bd7f0d 100644 (file)
@@ -873,8 +873,10 @@ read_events(struct wl_display *display)
        if (display->reader_count == 0) {
                total = wl_connection_read(display->connection);
                if (total == -1) {
-                       if (errno != EAGAIN)
-                               display_fatal_error(display, errno);
+                       if (errno == EAGAIN)
+                               return 0;
+
+                       display_fatal_error(display, errno);
                        return -1;
                } else if (total == 0) {
                        /* The compositor has closed the socket. This