> the only thing that confused me was the past tense sentence […] Ok, that sounds sensible. Here is an updated patch.
> However we'd have to change every client / toolkit and so using a > fatal display error is nicer since the toolkits should already be > handling that. Well, that would be ideal but it looks like actually GTK and Clutter/Cogl don't currently handle any errors so they will both end up constantly waking up the main loop and hitting 100% CPU. Maybe we should make them both abort on error like what would happen if you were using Xlib by default. Regards, - Neil -- >8 -- If EOF is encountered while reading from the Wayland socket, make wl_display_read_events() 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. 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. --- 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; + 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