[PATCH wayland v2 3/8] client: Don't make EPIPE fatal if triggered when flushing

Jonas Ådahl jadahl at gmail.com
Mon Dec 28 18:10:50 PST 2015


If flushing hits EPIPE it should not make it a fatal error since it
would make it impossible to process the rest of the data available in
the buffer. Instead, let reading the socket make EPIPE fatal, letting
the client have the possibility to process the last messages including
any error causing the termination.

Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
 src/wayland-client.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 470bcc4..035825c 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -1498,10 +1498,10 @@ wl_display_dispatch_queue(struct wl_display *display,
 		return ret;
 	}
 
-	/* We ignore EPIPE here, so that we try to read events before
-	 * returning an error.  When the compositor sends an error it
-	 * will close the socket, and if we bail out here we don't get
-	 * a chance to process the error. */
+       /* We ignore EPIPE here, so that we try to read events before
+        * returning an error.  When the compositor sends an error it
+        * will close the socket, and if we bail out here we don't get
+        * a chance to process the error. */
 	ret = wl_connection_flush(display->connection);
 	if (ret < 0 && errno != EAGAIN && errno != EPIPE) {
 		display_fatal_error(display, errno);
@@ -1727,8 +1727,12 @@ wl_display_flush(struct wl_display *display)
 		errno = display->last_error;
 		ret = -1;
 	} else {
+		/* We don't make EPIPE a fatal error here, so that we may try to
+		 * read events after the failed flush. When the compositor sends
+		 * an error it will close the socket, and if we make EPIPE fatal
+		 * here we don't get a chance to process the error. */
 		ret = wl_connection_flush(display->connection);
-		if (ret < 0 && errno != EAGAIN)
+		if (ret < 0 && errno != EAGAIN && errno != EPIPE)
 			display_fatal_error(display, errno);
 	}
 
-- 
2.4.3



More information about the wayland-devel mailing list