[RFC wayland 04/12] connection: close pending outgoing fds on shutdown

David Herrmann dh.herrmann at googlemail.com
Thu Oct 11 14:37:45 PDT 2012


When destroying a wl_connection object, there might still be data in the
queue. We would leak open file-descriptors so we must close them.

Signed-off-by: David Herrmann <dh.herrmann at googlemail.com>
---
 src/connection.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index f86a892..1ab95d8 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -167,9 +167,27 @@ wl_connection_create(int fd)
 	return connection;
 }
 
+static void
+close_fds(struct wl_buffer *buffer)
+{
+	int fds[MAX_FDS_OUT], i, count;
+	size_t size;
+
+	size = buffer->head - buffer->tail;
+	if (size == 0)
+		return;
+
+	wl_buffer_copy(buffer, fds, size);
+	count = size / sizeof fds[0];
+	for (i = 0; i < count; i++)
+		close(fds[i]);
+	buffer->tail += size;
+}
+
 void
 wl_connection_destroy(struct wl_connection *connection)
 {
+	close_fds(&connection->fds_out);
 	close(connection->fd);
 	free(connection);
 }
@@ -206,23 +224,6 @@ build_cmsg(struct wl_buffer *buffer, char *data, int *clen)
 }
 
 static void
-close_fds(struct wl_buffer *buffer)
-{
-	int fds[MAX_FDS_OUT], i, count;
-	size_t size;
-
-	size = buffer->head - buffer->tail;
-	if (size == 0)
-		return;
-
-	wl_buffer_copy(buffer, fds, size);
-	count = size / sizeof fds[0];
-	for (i = 0; i < count; i++)
-		close(fds[i]);
-	buffer->tail += size;
-}
-
-static void
 decode_cmsg(struct wl_buffer *buffer, struct msghdr *msg)
 {
 	struct cmsghdr *cmsg;
-- 
1.7.12.2



More information about the wayland-devel mailing list