On Tue, Jul 09, 2013 at 02:10:45PM +0100, Neil Roberts wrote: > If EOF is encountered while reading from the Wayland socket, > wl_display_read_events() will now return -1 so that it will be treated > as an error. The documentation for this function states that it will > set errno when there is an error so it additionally makes up an errno > of EPIPE.
Ah, yes, good catch. The multi-thread behaviour of wl_display_read_events() allows mulitple threads to call into it, but only one of the threads will get to read the data from the socket. When I wrote this I was thinking that all other threads will call recvmsg non-blocking and return 0 bytes. But 0 means "orderly shutdown" of course, while -1 and errno = EAGAIN is "no data right now". We do handle that case, but return -1, which the higher-level code will treat as an error. I'll fix that in a follow-up commit. > If we don't do this then when the compositor quits the Wayland socket > will be become ready for reading but wl_display_dispatch will do > nothing which typically makes the application take up 100% CPU. In > particular eglSwapBuffers will likely get stuck in an infinite busy > loop because it repeatedly calls wl_display_dispatch_queue while it > waits for the frame callback. Yes... I wonder why gtk+ doesn't handle POLLHUP and quits from that though. > --- > src/wayland-client.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/src/wayland-client.c b/src/wayland-client.c > index cb091ab..9400bcd 100644 > --- a/src/wayland-client.c > +++ b/src/wayland-client.c > @@ -877,6 +877,15 @@ read_events(struct wl_display *display) > display_fatal_error(display, errno); > return -1; > } > + else if (total == 0) { > + /* The compositor has closed the socket. This > + * should be considered an error so we'll fake > + * an errno */ > + errno = EPIPE; Yeah, EPIPE is fine I suppose. thanks, Kristian > + display_fatal_error(display, errno); > + return -1; > + } > + > for (rem = total; rem >= 8; rem -= size) { > size = queue_event(display, rem); > if (size == -1) { > -- > 1.7.11.3.g3c3efa5 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel